Есть ли способ перечислить все файлы во всех подкаталогах, кроме тех, которые находятся в текущем каталоге?
В каталоге 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}