MS-DOS内置命令是否返回错误\退出代码?

Dua*_* Le 8 dos batch-file windows-scripting

我还没有找到一种方法来获取rmdir的错误代码(如果返回).好像MS-DOS内部命令不会返回错误代码.有人可以证实吗?

使用这些命令的脚本如何知道命令是成功还是失败以决定下一步?最简单的方法是读取返回代码(如果返回).

提前致谢.

pax*_*blo 16

不,似乎没有.如果你echo %errorlevel%成功或失败后rmdir,你会遇到0两种情况:

c:\pax> mkdir qqq
c:\pax> rmdir qqq
c:\pax> echo %errorlevel%
0
c:\pax> rmdir qqq
The system cannot find the file specified.
c:\pax> echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)

对于该特定用例,您最好在之后检查目录是否存在:

if exist dodgy\. rmdir dodgy
if exist dodgy\. echo dodgy directory still exists
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果你调用一个单独的副本cmd.exe来执行操作,你可以获得错误级别:

c:\pax> mkdir qqq
c:\pax> cmd /c rmdir qqq
c:\pax> echo %errorlevel%
0
c:\pax> cmd /c rmdir qqq
The system cannot find the file specified.
c:\pax> echo %errorlevel%
2
Run Code Online (Sandbox Code Playgroud)

但是,我不相信这比删除它后简单地检查目录已经消失更好,因为它需要你启动一个全新的命令解释器.

  • 如果`rmdir dodgy`失败了,但是有一个名为'dodgy'的文件,那么你就麻烦了:)要测试目录是否存在使用:`if exist"dodgy \." (3认同)

And*_*ers 5

md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err
Run Code Online (Sandbox Code Playgroud)

这打印第一个rmdir可以正常,第二个可以打印错误.

rmdir是一个内部cmd.exe命令,因此%errorlevel%可能不会更新.