4

Я хочу, чтобы с помощью пакетного файла можно было искать и отображать файлы в куче папок с именем "error", расположенных в разных местах.

Папка с ошибками всегда находится на одной и той же глубине, но имена папок для них разные.

dir /A-d /b C:\Temp\*random_folder_name*\*random_folder_name*\error

Итак, я могу создать строку, которая отображает все файлы во всех папках с ошибками, две папки "ниже", в этом примере «C:\Temp»? или мне нужно добавить одну строку dir для каждой папки ошибок?

4 ответа4

4

Windows 7 и более поздние версии имеют оболочку питания:

Ты можешь попробовать:

Get-ChildItem \*\*\*

Это возвращает все элементы с глубиной двух подпапок. Добавление * добавляет дополнительную подпапку для поиска в.

Источник: https://stackoverflow.com/questions/13249085/limit-get-childitem-recursion-depth

0

Вы можете установить библиотеки GNU Win32 и использовать для этого grep :

dir /b /s *.*|grep "error\\[^\\]*$"

Предлагаемый способ их установки - с помощью getgnuwin32.

Кстати, если бы вы просто хотели видеть текстовые файлы, это было бы так:

dir /b /s *.txt|grep "error\\[^\\]*$"

Если вы хотите убедиться, что используются только папки определенной глубины, то это немного сложнее:

dir /b /s *.*|grep "^\([^\\]*\\\)\{7\}error\\[^\\]*$"

Это будет отображать результаты, только если каталог ошибок имеет семь каталогов (из корневого каталога).

0

Windows имеет встроенные альтернативы grep: find и findstr .

findstr будет поддерживать регулярные выражения (вы можете получить больше информации, набрав help findstr), но вы будете несколько ограничены выводом dir который, кажется, не поддерживает относительные списки ...

dir /A-d /S /B | findstr /B /R /I /X "C:\\Temp\\[^\\]*\\[^\\]*\\error\\.*"
0

Вот сравнительно простое, но неэффективное решение с использованием FINDSTR с регулярным выражением. Я использую [\\] для сопоставления \ из-за несоответствия в Vista.

@echo off
dir /b /s c:\temp\*|findstr /rix "c:[\\]temp[\\][^\\]*[\\][^\\]*[\\]error[\\][^\\]*"

Вот более сложное, но очень эффективное решение с использованием нескольких операторов FOR.

@echo off
for /d %%A in (c:\temp\*) do for /d %%B in ("%%A\*") do for %%C in ("%%B\error\*") do echo %%C

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .