开发者

Do MS-DOS built-in commands return an error\exit code?

开发者 https://www.devze.com 2023-03-15 23:54 出处:网络
I have not found a way to get the error code, if retu开发者_如何学Gorned, of rmdir. It seems like the MS-DOS internal commands do not return an error code. Can someone confirm that?

I have not found a way to get the error code, if retu开发者_如何学Gorned, of rmdir. It seems like the MS-DOS internal commands do not return an error code. Can someone confirm that?

How does a script that uses these commands know if the commands succeed or fail in order to decide the next step? The easiest way is to read their return code, if it is returned.

Thanks in advance.


No, it appears not to. If you echo %errorlevel% after either a successful or failed rmdir, you get 0 in both cases:

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

For that particular use case, you're probably best off checking the directory existence afterwards:

if exist dodgy\. rmdir dodgy
if exist dodgy\. echo dodgy directory still exists

Interestingly enough, if you call on a separate copy of cmd.exe to perfom the operation, you can get the error level:

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

However, I'm unconvinced that's better than simply checking that the directory is gone after you remove it, since it requires you to start up a whole new command interpreter.


md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err

This prints ok for the first rmdir and err for the second.

rmdir is an internal cmd.exe command so %errorlevel% is probably not updated.


rmdir returned 0 when either succeeded or failed. It seems intuitive that it should return an error code. However, other internal commands does (at least mkdir and dir commands I've tested).


They do, it's just hard to find the docs for specific commands, but here's the proof that rmdir (which according to MS docs here does not return exit codes) actually sets exit code:

$process = Start-Process -FilePath "cmd" -ArgumentList "/c rmdir /q /s C:\folder\unexistingfolder" -NoNewWindow -PassThru -Wait
$process.ExitCode

the output will be 2 if the directory does not exist, there are other codes for permission issues, etc.

0

精彩评论

暂无评论...
验证码 换一张
取 消