0

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

但是,尽管 if 语句似乎有效,但该语句后的错误级别始终为 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,虽然正确的输出是 File xxx 不存在并且 if 语句似乎运行成功?

已解决:我的错误。IF 语句之前的另一个语句将错误级别设置为 1。我还在上面发布的代码中放错了第一个 erroelevel 检查 - 对此感到抱歉。第一次检查和 IF 语句之间有一些代码导致错误级别设置为 0。我现在将更正它。感谢所有答案!

4

2 回答 2

2

if exist不设置errorlevel,即使文件不存在:

C:\Users>如果存在 qwerty (echo true) else echo false
错误的

C:\Users>echo %errorlevel%
0

C:\Users>如果存在 qwerty rem

C:\Users>echo %errorlevel%
0
于 2014-01-09T13:30:39.687 回答
0

尝试

if %errorLevel% == 1 (
    goto error
) else (
    echo ok
)
于 2014-01-09T12:26:13.283 回答