2f说的是对的,可是没有说明原因
先请楼主运行以下代码
if 1, equ 1 echo ok
pause>nul
if 1 equ 1 echo ok
pause>nul
可见以上两段代码执行的结果都是一样的
代码中没有用"echo off" 楼主可以把cmd屏幕中的命令行和以上代码比较一下
就会发现cmd在预处理的时候会把IF后需要比较字符中的某些特殊字符过滤掉。
通过比较cmd屏幕回显中的命令可以发现实际上连段代码执行的都是
"if 1 EQU 1 echo ok"
所以上面两段代码的执行结果才会一样
在你的代码中 加上"^"就把","转义为普通字符 所以
就成功啦
类似的字符还有";" 还有什么特殊字符lz有兴趣自己找一下 o(∩_∩)o...
那么lz的代码就应该变为以下代码
@echo off&setlocal enabledelayedexpansion
set E=000001
for /l %%k in (5 -1 1) do if !E:~0^,%%k! equ 0 set E=!E:~%%k!
echo 结果!E!
pause
或者可以这样理解
我们知道","在批处理中起分隔符的作用
那么 " if !E:~0^,%%k! equ 0 set E=!E:~%%k!"
就变成了 "if !E:~0 %%k! equ 0 set E=!E:~%%k!"
请执行
if !E:~0 %%k! equ 0 set E=!E:~%%k!
也就是说空格(分隔符)后面应该为比较运算符 而你却写成了 %%k!
它自然就报错了
if 1 1
if 1,geq,1,echo.ok
我想试完以上代码 你应该就明白了 o(∩_∩)o...
Last edited by q8249014 on 2009-9-20 at 11:10 ]