É possível canalizar uma lista de arquivos para o RMDIR no Windows?

9

Estou escrevendo um arquivo em lotes para o prompt de comando do Windows para excluir todos os diretórios correspondentes a uma determinada expressão.

Estou usando pela primeira vez DIRpara retornar uma lista simples de diretórios correspondentes à expressão. Eu gostaria de canalizar cada linha de saída no comando RMDIR, assim:

DIR *.delete /A:D /B /S | RMDIR /S /Q

No entanto, o comando acima parece não funcionar. Não entendo completamente por que isso não funciona e agradeceria a qualquer um que pudesse oferecer uma explicação.

user78755
fonte

Respostas:

5

You can use the following in your batch file:

FOR /f "tokens=*" %%a in ('dir *.delete /A:D /B /S') DO RMDIR /S /Q %%a

This uses the FOR command to loop through the output of a given command (in this case dir *.delete /A:D /B /S, and for each item returned it will run the command specified with the DO statement, RMDIR /S /Q. The item is referred to by the variable %%a.

The reason it doesn't work simply piping the DIR output into RMDIR is because you're sending the whole output (multiple lines) all at once as a single parameter to RMDIR. The FOR command breaks down this output, iterates through each item and then sends that to RMDIR one by one.

Gaff
fonte