файлы списка командной строки в подпапках, но не в текущей папке

616
Jose

У меня есть пакетный файл, который дает мне список каталогов всех файлов в текущей и подпапках. Я хотел бы изменить это, чтобы перечислить все файлы, которые находятся в подпапках, но НЕ в текущей папке. В настоящее время я использую эту команду ниже, которая успешно работает, чтобы перечислить все файлы в текущей папке и подпапках.

cd "c:\temp" dir /s/b *.doc>c:\temp\mylist.txt 

Это дает следующие результаты:

c:\temp\test8.doc c:\temp\test9 (2).doc c:\temp\test9.doc c:\temp\012015\blah_012340.doc c:\temp\032016\blah_124756.doc c:\temp\042016\blah_125230.doc c:\temp\052016\blah_052647.doc 

Я хотел бы, чтобы мои результаты не показывали то, что находится непосредственно в c: \ temp, поэтому мои желаемые результаты были бы:

c:\temp\012015\blah_012340.doc c:\temp\032016\blah_124756.doc c:\temp\042016\blah_125230.doc c:\temp\052016\blah_052647.doc 
1
Почему вы не используете `tree / f` для лучшего визуального качества? w17t 7 лет назад 0
Я не эксперт по PowerShell, но я думаю, что вы можете легко сделать это на PowerShell, используя ключи `-include` и` -exclude` `dir` (псевдоним). w17t 7 лет назад 0
Я не думаю, что дерево будет работать, поскольку мне нужно, чтобы список был выгружен в список, который я затем использую для своей следующей функции в командном файле. Powershell может работать, но я тоже не знаю powershell. Я думаю, что я могу попытаться найти некоторые примеры, которые могли бы работать и пойти дальше. Jose 7 лет назад 0

1 ответ на вопрос

0
Zalmy

это должно работать

for /f "delims=" %5 in ('dir /a:d /b') do dir /b /s "%5" 

Вот поломка для этого лайнера.

for /f используется для зацикливания списка элементов.

"delims="устанавливает разделители на none, поэтому каждая строка обрабатывается как одна фраза. По умолчанию пробелы будут рассматриваться как разделитель.

%5 переменная

in ('dir /a:d /b') это получает список каталогов целевой папки.

do dir /b /s "%5"здесь вы определяете свое действие, doа затем команду, а затем переменную %5в качестве аргумента.

Обратите внимание, что когда вы запускаете это из командного файла, вы должны использовать %%5

for /f "delims=" %%5 in ('dir /a:d /b') do dir /b /s "%%5"

Надеюсь это поможет.

Спасибо

Похоже, это сработает, как только я выясню, в чем дело. Я не слишком уверен, что «% 5» должен был что-то изменить, поэтому я оставил все как есть. Я добавил код, указанный в моей партии. Результаты, которые он выводил, исключали файлы, которые находились в «корневом» каталоге, который я искал. Однако в нем был указан только один подкаталог, и в этом тесте было 3 подкаталога. На данный момент соответствующая часть моего скрипта выглядит следующим образом: cd "c: \ temp" for / f "delims =" %% 5 in ('dir / a: d / b') do dir / b / s "%% 5">% list% Jose 7 лет назад 0
Так как он обрабатывается как разные команды, вы должны использовать `>>`. в вашем случае `for / f" delims = "%% 5 in ('dir / a: d / b') do dir / b / s" %% 5 ">>% list%` Zalmy 7 лет назад 0

Похожие вопросы