批处理文件 FOR /f 标记不循环

Batch file FOR /f tokens not looping

我正在尝试编写批处理文件以将一些 pdf 排序到相应的目录。例如。 xxx1_date.pdf 到 DIR1,xxx2_date.pdf 到 DIR2。下面是我的代码,摘自我在这个网站上找到的一个脚本。谢谢。

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

在您的代码中,file.log 应包含行,例如:

xxx1_date1.pdf
xxx2_date2.pdf

第一个循环会将xxx1分配给%%f,然后分配给line并处理它;然后 将 xxx2 分配给 %%f,然后分配给 line 并处理 that.

“令牌 1”是第一个 _(定界符)之前的字符串,并分配给 %%f.
“Token *”是第一个_(分隔符)之后的字符串,分配给%%g.

由于line包含xxx1xxx2,下一个forxxx1xxx2分配给%%a并且 nothing%%b 因为分隔符又是 _.

因为 xxx1xxx2 都不匹配两个日期字符串,所以 move 不会发生。

无论如何,line 不会被更改,也不会 ,因此 if not ... 始终为真,你将进入死循环。

现在您可以修复您的代码,一旦您意识到文件名的哪些部分将出现在何处,或者您可以通过简单地执行

来完成任务
move *_04693139.pdf DIR1
move *_34051646.pdf DIR2