6

Цель: удаление пустых папок в конце многоэтапной очистки. rd без "Force" удаляет не пустые каталоги.

Это работает:

for /f "usebackq" %%d in (`"dir O:\Folder~1\Folder /ad/b/s | sort /R"`) do rd "%%d"

Это не работает:

for /f "usebackq" %%d in (`"dir \"O:\Folder With Spaces\Folder\" /ad/b/s | sort /R"`) do rd "%%d"
for /f "usebackq" %%d in (`"dir ""O:\Folder With Spaces\Folder"" /ad/b/s | sort /R"`) do rd "%%d"
for /f "usebackq" %%d in (`"dir ^"O:\Folder With Spaces\Folder^" /ad/b/s | sort /R"`) do rd "%%d"

Я знаю, что мне не хватает чего-то простого ...

РЕДАКТИРОВАТЬ
Добавив приведенный ниже пример к смеси:

Если я действительно повторяю% d, то это повторяет .... "O:\Patient" Не полное имя.

2 ответа2

3

Вам не нужны (внешние) двойные кавычки с usebackq .

Вы можете получить список каталогов из ваших переданных по конвейеру команд, но когда в выводе есть пробелы, только первая часть перейдет к переменной %%d . Чтобы избежать этого, используйте дополнительный параметр tokens=* (из for /?):

for /f "usebackq tokens=*" %%d in (`dir "C:\Program Files" /ad /b /s ^| sort /R`) do echo "%%d"
0

Вам нужно экранировать символ трубы:

FOR /F "usebackq" %i IN (`dir /b ^| sort`) DO echo %i

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .