使用调用 <file.bat> 结果 "sleep is not recognized as an internal or external command.."

Using call <file.bat> results in "sleep is not recognized as an internal or external command.."

我有一个在 for 循环中调用其他命令的脚本:

for %%x in (%CMDS::= %) do (
  call C:\%%x %1%
  echo "%%x complete"
)

但是,运行这会导致控制台吐出:

'sleep' is not recognized as an internal or external command,
operable program or batch file.

这是因为我循环遍历的文件和 运行 中包含这些命令。为什么如果我 运行 这些文件一个一个地工作,但是当使用 call 链接时他们不工作?我可以 sleep 在这个脚本之外的终端中..

此致

批量没有sleep命令。这就是您收到此错误的原因。

编辑: Windows CMD 或 Batch 中没有 sleep 命令。但是:由于您可以在控制台中使用该命令,我想可能有一个名为 sleep 的脚本或程序。此脚本或程序可能位于您的 工作目录 %PATH% 变量中包含的其他目录中。如果是这种情况,则可能是您的脚本由于路径问题而给您这个错误。

说,你在 C:\SomeFolder 里面有一个 sleep.exe。您正在调用另一个将当前目录更改为 D:\AnotherFolder 的脚本或命令。现在另一个脚本或命令试图执行你神秘的 sleep 命令,假设工作目录是 C:\SomeFolder 但因为你现在在不同的文件夹 (D:\SnotherFolder) 中,sleep 可以被发现。此外,当使用 call 时,调用脚本的变量范围也成为被调用脚本的范围。所以变量也有可能被不同的脚本覆盖。这样的变量可能包含您的睡眠命令的路径。这也可能导致错误。

感谢 ,我通过将 .bat 文件中的 sleep 5 替换为:

解决了这个错误
powershell -Command "& {sleep 5}"

现在工作正常。更好的是,还测试了 Stephan 的建议:

timeout 5

更简单,并显示像

这样的好消息

Waiting for 0 seconds, press a key to continue ...

请注意,某些 Windows 版本需要 /t 选项来定义时间。

timeout /t 5