У меня есть дерево папок, вот так (это только пример, оно будет глубже в моем реальном случае):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
В моих файлах есть один или несколько пробелов в имени, и мне нужно выполнить команду над ними, поэтому меня интересует foo bar.txt, но не foobar.txt.
Я попробовал (внутри командного файла):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
где команда простая echo
.
Это не работает, потому что пространство пропущено, и я не получаю вывод.
Это работает, но это не то, что мне нужно:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Это печатает:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
Я пытался использовать кавычку ("), но это не работает:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
Это не работает, потому что кавычка все еще включена в вывод:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Без рекурсивного переключателя вы можете запретить
FOR
вывод кавычек:Вы могли бы быть в состоянии сделать вложенные
FOR
утверждения. Внешний будет идти по дереву каталогов, а внутренний будет выше.источник
FOR /R %%d in (.) DO for %%f ...
рекурсивно, но есть некоторые вещи, которые нужно решить, чтобы заставить его работать. Возможно, вам придется использовать отложенное расширение, например.SETLOCAL ENABLEDELAYEDEXPANSION
и!varname!
т. д.Возможно, вы захотите посмотреть на команду forfiles.
'/ S' - рекурсия. Поиск по всем подкаталогам
'/ M "* *"' - Маска файла. Ищите только файлы с пробелом в имени.
'/ C "cmd / C echo @PATH"' - Команда. Выполните эту команду для всех найденных файлов.
Пример вывода:
источник
Флаг,
f
который вам нужен, чтобы получить абсолютное имя файла без кавычек (так что вы можете поместить кавычки, если вам нужно). Но так как он конфликтует с выбранным вами именем переменной, вы должны использовать другое:источник
Спасибо, Деннис! Я тоже работал над почти идентичной проблемой. Я хотел файл bat, который я мог бы передать во входном параметре в качестве строки поиска имен файлов - рекурсивно по каталогам. На всякий случай это кому-то еще пригодится, вот оно.
источник