循环中的批处理文件,变量扩展和子字符串

时间:2012-08-27 12:56:44

标签: variables batch-file substring expansion

我无法绕过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!此时意外”

关于如何改善情况/脚本的任何想法?

由于

1 个答案:

答案 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