Пакетный однострочный для поиска файлов с подстановочным знаком каталога
Рассмотрим следующую структуру каталогов
- 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.
1 ответ
Решение
Использовать рекурсивный 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\\[^\\]*$"