“RD”命令在成功或失败时不返回“0”或“1”作为错误级别

问题描述 投票:0回答:2

我在批处理脚本中使用

RD
命令删除目录。

我假设

RD
应该返回
0
成功,或者
1
失败。但它似乎没有这样做。

我在

Robocopy
命令之前使用
RD
命令实用程序,它取而代之的是
Errorlevel
中的
Robocopy

请告知确切的退出代码

RD
返回成功和失败。

robocopy src target ...
rd /S /Q %Target%
IF  %ERRORLEVEL% EQU 0  goto :good
IF  %ERRORLEVEL% NEQ 0  goto :fail
windows batch-file cmd errorlevel rd
2个回答
0
投票

你的假设不正确。

@ECHO OFF
SETLOCAL

MD hit
RD hit
ECHO %errorlevel%
RD miss
ECHO %errorlevel%

GOTO :EOF

0
投票

是的,

RD
命令有一种“有趣”的方式来返回错误代码。基本上,您只需要在
|| REM
之后添加
RD
命令即可正确“设置” ERRORLEVEL 值:

robocopy src target ...
rd /S /Q %Target% || rem
IF  %ERRORLEVEL% EQU 0  goto :good
IF  %ERRORLEVEL% NEQ 0  goto :fail

这些是

RD
命令以这种方式返回的错误值:

1 = Bad switch given
2 = Directory not found
5 = Access denied
32 = Directory in use
145 = Directory not empty.

此行为在下面详细描述表 5 标题在this answer关于“由内部命令设置的错误级别值”

© www.soinside.com 2019 - 2024. All rights reserved.