Batch file 批处理:If-exist语句导致errorlevel为1,尽管它成功了

Batch file 批处理:If-exist语句导致errorlevel为1,尽管它成功了,batch-file,file-exists,errorlevel,Batch File,File Exists,Errorlevel,在我的批处理文件(一个普通的*.bat文件)中,我想检查文件是否存在。如果存在,则应将其复制;如果不存在,则应将输出写入shell。在if语句之后,我想检查(可能的)copy命令是否成功执行。我正在做一个错误级别检查 但是,尽管if语句似乎有效,但语句后的errorlevel始终为1。我知道if语句是有效的,因为当文件不存在时,相应的消息会写入shell 代码如下: if errorlevel 1 goto error ... if exist %my_path_and_file% (

在我的批处理文件(一个普通的*.bat文件)中,我想检查文件是否存在。如果存在,则应将其复制;如果不存在,则应将输出写入shell。在if语句之后,我想检查(可能的)copy命令是否成功执行。我正在做一个错误级别检查

但是,尽管if语句似乎有效,但语句后的errorlevel始终为1。我知道if语句是有效的,因为当文件不存在时,相应的消息会写入shell

代码如下:

if errorlevel 1 goto error
...     
if exist %my_path_and_file% (
copy %my_path_and_file% %my_target_path_and_file%

) ELSE (
echo File %immo_path_and_file% does not exist
)

if errorlevel 1 goto error    
...    
:error    
...
尽管正确的输出是正确的,但为什么在if语句之后errorlevel总是1 文件xxx不存在 if语句似乎成功运行了吗

解决:我的错误。IF语句之前的另一个语句将errorlevel设置为1。我还错放了我上面发布的代码中的第一个ERROLELEVEL检查-对此表示抱歉。在第一次检查和IF语句之间有一些代码导致errorlevel设置为0。我现在就纠正它。谢谢你的回答

试试看

if %errorLevel% == 1 (
    goto error
) else (
    echo ok
)

如果存在
不会设置
错误级别
,即使文件不存在:

C:\Users>if exist qwerty (echo true) else echo false false C:\Users>echo %errorlevel% 0 C:\Users>if exist qwerty rem C:\Users>echo %errorlevel% 0 C:\Users>if exist qwerty(echo true)else echo false 假的 C:\Users>echo%errorlevel% 0 C:\Users>如果存在qwerty rem C:\Users>echo%errorlevel% 0
文件名中有空格吗?在这段代码中,如何确定if命令后的errorlevel为1?如果errorlevel为1,则在
:error
标签上继续执行,但如果为0,则在下一行
:error
标签上继续执行。@npocmaka:不,我没有。示例:设置我的_path_和_file=“。\Exports\folderone\test.txt”@MCND:在第二次errorlevel检查之后,我有很多其他语句,它们没有被触发。输出还向我显示,正是该检查“转到”了:error,与我的检查结果相同。