windows - batch - for (can somebody explain How does this code work?)
@echo off
for /f %%i in ('dir f* /s /aD /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR% > output.txt
here is the output in this directory
CodePudding user response:
[1] Execute dir f* /s /aD /b
- this lists all names-only (/b
) in the directory and in subdirectories (/s
) that are directories (/ad
) and match the name-mask f*
[2] 2^> nul - suppress error messages (ie - no matching names found)
[3] ^| - send the output of the dir
command to find
[4] find "" /v /c - find any line that does not (/v
) contain nothing (""
) and output the count of such lines (/c
)
[5] The resultant count-string is assigned to %%i
by the for
command
[6] And then to the variable by the set
The caret (^
) tells cmd
that the symbol following is part of the command to be executed, not of the for
.
See for /?
, dir /?
, find /?
and set /?
from the prompt for details, or thousands of examples on SO.