我无法绕过DOS批处理文件的变量替换机制,特别是在for循环中。
简化批处理问题:想象一下以下目录
01foo.txt
02foo.dir(这是一个目录)
bar01(这是一个目录)
bar02(这是一个目录)
我想将此目录中不以'bar'开头的所有文件/目录移动到bar + _the_first_2_characters_of_the_filename_or_directory_name的子目录。
在这种情况下,01foo.txt将被移动到bar01,02foo.dir将被移动到bar02。
以下脚本是我的第一次尝试:
setlocal EnableDelayedExpansion
for %%A in (*) do (
set _x=%%A
if (!_x:~0,2! NEQ "bar") move %%A bar!_x:~0,2!
)
endlocal
除了这似乎仅针对文件循环的事实之外,它根本不起作用:-)。 我在if语句中输入错误,说“3!此时意外”
关于如何改善情况/脚本的任何想法?
由于
答案 0 :(得分:2)
这只是语法问题......
IF
声明不期望不接受周围的括号
!_x:~0,2!
中的逗号会破坏IF-statment,您可以引用这两个部分或将其移动到自己的set prefix=!_x:~0,2!"
行。
如果您引用"bar"
,则还需要引用"!prefix!"
。
这就是全部
setlocal EnableDelayedExpansion
for %%A in (*) do (
set "_x=%%A"
set "prefix=!_x:~0,2!"
if "!prefix!" NEQ "bar" move %%A bar!prefix!
)
endlocal