首页 > 解决方案 > Windows 命令在批处理文件中不断失败,但不是命令提示符中的命令

问题描述

我正在从命令提示符和批处理文件中运行这个简单的命令。尽管两者都“起作用”,因为文件被复制到目标,但从批处理运行时返回代码始终为 1,从命令提示符运行时返回代码始终为 0。

 copy /Y d:\my.zip C:\my\target\

我不知道哪里错了,除了当我看到返回码

@echo on

任何提示表示赞赏。

更新

我进一步挖掘并注意到我在一个if NOT %errorlevel% == 0 ()块内执行命令,一旦我将它移出然后它运行正常。我已经setlocal enabledelayedexpansionand setlocal enableextensions,所以我认为我应该可以在 if 块内做一些事情,但事实证明这是一个坏主意。你能解释一下我最初做错了什么吗?

旧代码


setlocal enabledelayedexpansion
setlocal enableextensions

where mycmd
if NOT %errorlevel% == 0 (
   copy /Y d:\my.zip C:\my\target\
   if NOT %errorlevel% == 0 (
      echo Failed to copy
      goto :fail
   )
   start /wait cmd /c "tar -xvf c:\my\target\my.zip -C c:\my\target\"
   if NOT %errorlevel% == 0 (
      echo Failed to unzip
      goto :fail
   )
   setx PATH "%PATH%;c:\my\target"
   if NOT %errorlevel% == 0 (
      echo Failed to update user path
      goto :fail
   )
)

顶级 if 块中的所有这些命令都失败了。我认为延迟扩展可以与初始的 一起使用setlocal enabledelayedexpansion,但事实并非如此。

我哪里错了?

标签: windowsbatch-file

解决方案


推荐阅读