我还没有找到一种方法来获取rmdir的错误代码(如果返回)。好像MS-DOS内部命令不会返回错误代码。有人可以证实吗?
使用这些命令的脚本如何知道命令是成功还是失败以决定下一步?最简单的方法是读取它们的返回代码(如果已返回)。
提前致谢。
答案 0 :(得分: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
对于特定的用例,您最好在之后检查目录是否存在:
if exist dodgy\. rmdir dodgy
if exist dodgy\. echo dodgy directory still exists
有趣的是,如果您调用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
但是,我不相信在删除目录后只需检查目录是否已经消失,因为它需要您启动一个全新的命令解释程序。
答案 1 :(得分:5)
md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err
这可以打印第一个rmdir,错误打印第二个。
rmdir是一个内部cmd.exe命令,因此%errorlevel%可能不会更新。
答案 2 :(得分:4)
rmdir在成功或失败时返回0。它似乎很直观,它应该返回一个错误代码。但是,其他内部命令(至少我测试过的mkdir和dir命令)。
答案 3 :(得分:0)
他们这样做,很难找到特定命令的文档,但这里证明了rmdir
(根据MS文档here 的证据不返回退出代码) 实际设置退出代码 :
$process = Start-Process -FilePath "cmd" -ArgumentList "/c rmdir /q /s C:\folder\unexistingfolder" -NoNewWindow -PassThru -Wait
$process.ExitCode
如果目录不存在,则输出为2
,还有其他代码用于权限问题等。