本帖最后由 CrLf 于 2014-11-25 04:03 编辑
回复 12# qzwqzw
其实是我看你的回复不见了之后自己删的,然后默默地修改了原帖...
dir 的返回值确实可能非 0,这我混乱了,但 11 楼的刺仍然部分成立
12 楼的 $xxx 输出是在 StdOut,不在 StdIn,所以 for /f 的输入仍然为空
致命一击:- (for /f %%f in ('$xxx 2^>^&1') do echo+%%f)||echo+!errorlevel!
复制代码
- (for /f %f in ('"dir 一个不存在的文件 2>&1 >nul"') do echo+%f)||echo+[!errorlevel!]
复制代码 所以我认为 for /f 的返回值与其中命令的返回值无关,而仅与 for /f 有无输入以及 for 本身的参数错误有关,详见下方测试结果
-------------------------------------------------------------------------------------
无输入时等于 1:- (for /f %%f in (' ') do break)||echo+!errorlevel!
复制代码
- (for /f %%f in ("") do break)||echo+!errorlevel!
复制代码
- (for /f "skip=99999999" %%f in (a.txt) do break)||echo+!errorlevel!
复制代码 参数错误也等于 1:- (for /f "错误的参数" %%f in ("test") do break)||echo+!errorlevel!
复制代码 也有等于 2 的时候:- (for /f %%f in (一个不存在的文件) do break)||echo+!errorlevel!
复制代码 有趣的是,好像有且仅有一种情况是等于 3 的:- (for /f %%f in (^") do break)||echo+!errorlevel!
复制代码
|