Arquivo de lote do Windows: usebackq, entre aspas

6

Objetivo: excluir pastas vazias ao final de uma limpeza em várias etapas. rd sem "Força" remove diretórios que não estão vazios.

Isso funciona:

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

Isso não funciona:

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"

Eu sei que estou sentindo falta de algo simples ...

EDITAR
Adicionando o exemplo abaixo ao mix:

Seeurealmentefizerecodos%dechos...."O: \ Patient". Não é o nome completo.

    
por WernerCD 05.10.2011 / 18:11

2 respostas

3

Você não precisa das aspas duplas (externas) com usebackq .

Você pode obter a lista de diretórios de seus comandos canalizados, mas quando a saída tiver espaços, somente a primeira parte irá para a variável %%d . Para evitar isso, use um parâmetro tokens=* adicional (de for /? ):

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

Você precisa escapar do caractere de pipe:

FOR /F "usebackq" %i IN ('dir /b ^| sort') DO echo %i
    
por 05.10.2011 / 18:36