批处理文件 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
包含xxx1
和xxx2
,下一个for
将xxx1
、xxx2
分配给%%a
并且 nothing 到 %%b
因为分隔符又是 _
.
因为 xxx1
和 xxx2
都不匹配两个日期字符串,所以 move
不会发生。
无论如何,line
不会被更改,也不会 空 ,因此 if not ...
将 始终为真,你将进入死循环。
现在您可以修复您的代码,一旦您意识到文件名的哪些部分将出现在何处,或者您可以通过简单地执行
来完成任务
move *_04693139.pdf DIR1
move *_34051646.pdf DIR2
我正在尝试编写批处理文件以将一些 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
包含xxx1
和xxx2
,下一个for
将xxx1
、xxx2
分配给%%a
并且 nothing 到 %%b
因为分隔符又是 _
.
因为 xxx1
和 xxx2
都不匹配两个日期字符串,所以 move
不会发生。
无论如何,line
不会被更改,也不会 空 ,因此 if not ...
将 始终为真,你将进入死循环。
现在您可以修复您的代码,一旦您意识到文件名的哪些部分将出现在何处,或者您可以通过简单地执行
来完成任务move *_04693139.pdf DIR1
move *_34051646.pdf DIR2