10

I am writing a batch file for the Windows command prompt to delete all directories matching a certain expression.

I am first using DIR to return a plain list of directories matching the expression. I would like to pipe each line of output into the RMDIR command, like this:

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

However the above command doesn't seem to work. I don't fully understand why this doesn't work and would be grateful to anyone who can offer an explanation.

1 Answer 1

6

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.

0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .