标题: [其他] 在只有一个子文件夹的目录内代码运行不正常 [打印本页]
作者: tireless 时间: 2009-7-31 22:48 标题: 在只有一个子文件夹的目录内代码运行不正常
- (for /r %a in (*.bathome) do echo %a) || echo error
复制代码
例如,在 D:\新建文件夹 内有一个文件夹且只有一个,运行这个代码不会显示 error。
[ 本帖最后由 tireless 于 2009-7-31 23:07 编辑 ]
作者: namejm 时间: 2009-7-31 23:07
1、最里面的括号内不存在 *.bathome 这一元素,所以,echo 语句不会有输出结果;
2、即使 echo 语句没有输出结果,但是,整个for语句不存在语法错误,也不存在执行错误,所以,整个for语句的执行是成功的;
3、因为 || 之前的语句执行成功,所以,|| 后的语句不会得到执行。
______________________________
以上说法似乎有误,正在验证中
作者: tireless 时间: 2009-7-31 23:15
我是这么理解的,() 内的代码没有执行成功,所以会执行 ()|| 后的命令。
而我在目录内多建一个文件夹,又会显示 error:
D:\新建文件夹>dir /s /b
D:\新建文件夹\a
D:\新建文件夹>(for /r %a in (*.bathome) do echo %a) || echo error
D:\新建文件夹>md b
D:\新建文件夹>dir /s /b
D:\新建文件夹\a
D:\新建文件夹\b
D:\新建文件夹>(for /r %a in (*.bathome) do echo %a) || echo error
error
D:\新建文件夹>
作者: zqz0012005 时间: 2009-8-1 05:33
for命令的错误返回码本身就是很复杂的(曾在verybat上讨论过一部分,未果)。
jm说的第一条是对的,循环集为空时,do子句不会执行。
do子句不执行,仅是子句的命令不影响errorlevel。
但for是怎么处理循环集为空这种情况,怎么影响errorlevel,还是求知的。
D:\test>dir /a/s/b
D:\test\a
D:\test>(for %a in (*.bathome) do echo %a) && echo ok+%errorlevel% || echo error+
%errorlevel%
error+0
D:\test>(for /r %a in (*.bathome) do echo %a) && echo ok+%errorlevel% || echo err
or+%errorlevel%
ok+2090002720
D:\test>(for %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo error+
%errorlevel%
error+2090002720
D:\test>md b
D:\test>(for %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo error+
%errorlevel%
error+0
D:\test>(for /r %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo err
or+%errorlevel%
error+2090002720
D:\test>(for %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo error+
%errorlevel%
error+1420992
D:\test>(for /r %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo err
or+%errorlevel%
error+2090002720
D:\test>(for %a in (*.bathome) do echo %a) && echo ok+%errorlevel%|| echo error+
%errorlevel%
error+1421208
注意看,errorlevel 还发生了改变。
作者: zqz0012005 时间: 2009-8-1 13:49
又忘了,应该使用延迟的变量。
运行 cmd /vn ,将%errorlevel%换成!errorlevel!
作者: Lumiere 时间: 2009-8-1 16:20
在根目录下运行,不管盘下有多少个文件,都不会显示error,很有意思勒,在一级目录下有一个文件夹也不会显示error,有俩以上就会显示。难道只有俩文件夹的时候就会执行出错?不可思议
作者: netbenton 时间: 2009-8-1 21:32
看来错误返回码是乱的
应该是对于这种情况,应该是cmd的bug,它并没有去规定返回码是多少所至,而是只要一出错就退出返回提示符。
就像汇编调用退出中断一样:
mov ah,4c
int 21
就可以退出,而没有设置:mov al,?
以至于运行到不同地方就有不同的返回码,当然也有可能为0,造成了正常退出的假像。
以上仅为个人猜想
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |