Есть ли способ перечислить все файлы во всех подкаталогах, кроме тех, которые находятся в текущем каталоге?
В каталоге dir /s /b перечислены все файлы, включая файлы в текущем каталоге. Это не то, что я хочу.
Используйте Powershell:
Get-ChildItem .\*\*
Приведенный выше пример действительно получает только 2-й уровень или каталоги, а не содержимое подпапок.
Ответ гостя лучше:
Get-ChildItem -Directory | ForEach-Object {Get-ChildItem -Recurse | Select-Object FullName}
Есть несколько решений, которые я постараюсь объяснить одно за другим.
партия
1) for /d %i in (*) do @dir /b /s "%i"
(*) распространяется на все файлы в текущем каталоге.
Затем for /d перебирает все каталоги, кроме обычных файлов, выполняя dir /b /s для каждого каталога.
Поскольку for команд, выполняемых эхом, @ используется для подавления эха.
2) for /f "delims=" %i in ('dir /b /A:D') do @dir /b /s "%i"
'dir /b /A:D' возвращает все каталоги в текущем каталоге, каждый каталог находится в одной строке.
"delims=" указывает for /f не маркировать строку, а назначить всю строку %i .
for /f затем перебирает все строки, выполняя dir /b /s для каждой строки.
Используйте %%i вместо %i в командном файле.
Powershell
dir *\* возвращает файлы только в каталогах уровня 2.
dir -recurse *\* также возвращает файлы в более глубоких каталогах, но не показывает пустую папку на уровне 2.
Правильные команды, которые используют тот же подход, что и в пакетном режиме:
1) dir | where {$_.PsIsContainer} | foreach {dir -recurse $_} | foreach {echo $_.fullname}
2) dir -directory | foreach {dir -recurse $_} | foreach {echo $_.fullname}