[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
今天碰到头疼的事了...请问 tree 是否不存在大于 0 的返回值呢?如果有,又是什么时候?另外,如何通过最简洁高效的命令来判断一个文件是否不存在子文件夹呢?我原本打算在代码中用类似下面的思路:
  1. tree "%cd%" >nul 2>nul||echo 不存在子文件夹
复制代码
但是调试了几遍总是不对,最后发现 tree 好像碰到无子目录的情况也不会返回大于 0 的 errorlevel

TOP

4# powerbat


Thanks,看来貌似真的没有指望了?唉,微软真不给力啊

TOP

7# qzwqzw


这是否说明部分内部命令不存在返回值呢?比如 echo 和 if、for

TOP

楼主看这里:
|| 会改变退出码的实例
话说以前好像也碰到过 || 改变退出码的情况,不知道是不是记错了

TOP

本帖最后由 CrLf 于 2014-11-25 02:59 编辑

回复 10# qzwqzw


挑个刺:
它的返回值为1(实际是cmd /c dir /ad /b test的返回值)

cmd /c dir /ad /b test 返回值为 0
真正改变内部“返回值”的是无取值的 for /f,再由 || 把它表现到 errorlevel 变量中:
  1. (for /f %%a in ("") do echo 这里不可能显示)||echo !errorlevel!
复制代码

TOP

本帖最后由 CrLf 于 2014-11-25 04:03 编辑

回复 12# qzwqzw


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

评分人数

    • qzwqzw: 辛苦了PB + 6 技术 + 1

TOP

返回列表