Home > database >  Batch file FOR /f tokens not looping
Batch file FOR /f tokens not looping

Time:02-28

I'm trying to write a batch file to sort some pdf to respective directory. eg. xxx1_date.pdf to DIR1, xxx2_date.pdf to DIR2. Below are my code taken from one a script I found in this site. Thank you.

SetLocal EnableDelayedExpansion

dir /b /a-d *.pdf > file.log

for /f "tokens=1* delims=_" %%f in (file.log) do (
    set line=%%f
    call :processToken
    )
goto :eof

:processToken
for /f "tokens=1* delims=_" %%a in ("%line%") do (
        IF "%%a"=="04693139" move %%a* DIR1
        IF "%%a"=="34051646" move %%a* DIR2
    )
if not "%line%" == "" goto :processToken
goto :eof

CodePudding user response:

In your code, file.log should contain lines, eg:

xxx1_date1.pdf
xxx2_date2.pdf

The first loop would assign xxx1 to %%f, then to line and process it; then assign xxx2 to %%f, then to line and process that.

"Token 1" is the string up to the first _ (the delimiter) and is assigned to %%f.
"Token *" is the string after the first _ (the delimiter) and is assigned to %%g.

Since line contains xxx1 and xxx2, the next for will assign xxx1, xxx2 to %%a and nothing to %%b since the delimiter is again _.

Since neither xxx1 nor xxx2 matches to two date strings, the move will not take place.

Regardless, line is not being changed and is not empty, so the if not ... will always be true, and you will enter an endless loop.

Now you could fix your code once you realise what portions of you filename will appear where, or you could do the task by simply executing

move *_04693139.pdf DIR1
move *_34051646.pdf DIR2
  • Related