2015-10-07 1 views
2

Рассмотрим следующую структуру каталоговBatch одного вкладыша для поиска файлов с каталога шаблона

- Temp\ 
- Temp\DirA\ 
- Temp\DirA\Content\ 
- Temp\DirA\Content\file.txt 
- Temp\DirB\ 
- Temp\DirB\Content\ 
- Temp\DirB\Content\file.txt 

Теперь я хочу, чтобы перечислить все текстовые файлы, находящиеся внутри каталогов контента в одном операторе линии. Я бы ожидал чего-то подобного:

dir Temp\*\Content\*.txt 

, но это не так (это дает синтаксическую ошибку). Даже forfiles возвращает пустой результат. Есть ли удобный способ добиться этого?

Обратите внимание: моя команда в реальном мире будет содержать несколько подстановочных знаков. Я не хочу комбинировать каталог foreach с файлом foreach.

ответ

3

Использование рекурсивной dir /s и фильтровать вывод по \Content\:

dir /s /b Temp\*.txt Temp\*.log | find "\Content\" 

И в случае, если вам не нужно перечислять файлы в Content\other_folder\ использовать регулярное выражение:

dir /s /b Temp\*.txt Temp\*.log | findstr /r "\\Content\\[^\\]*$" 
+0

Ну, не то, что я надеялся, но это должно заставить меня начать. Полагаю, я установлю perl. Если я правильно помню, это должно сделать трюк: 'perl -e 'foreach () {print; print "\ n"} '' –

+0

@SchlaWiener, вместо' forfiles' вы можете делать все в 'for/f' parse-loop вывода из данной команды, и это будет намного быстрее, чем' forfiles' в случае у вас много файлов. Более читабельна, наверное, тоже. – wOxxOm

+0

Ну что ж, в инструменте поиска unix я могу просто «найти /etc/*/*.conf -type f', и я подумал, что может быть прямая замена окон. Во всяком случае, с perl я могу получить тот же результат (или просто установить инструменты unix для окон) –