禁用“Windows 找不到‘[foo].exe’”弹出窗口

禁用“Windows 找不到‘[foo].exe’”弹出窗口

当我使用start批处理脚本中的命令启动程序时,我希望该程序能够异步启动;如果我启动的程序存在,这种情况就会如我所料那样发生。

但是,如果我尝试运行start一个不存在的程序,Windows 会弹出一个窗口,告诉我找不到该文件,并锁定批处理脚本的执行,直到我手动关闭该窗口。这很烦人。由于某些远程文件系统的诡计,我无法可靠地保证二进制文件在运行之前存在,也无法锁定二进制文件。在我的场景中,如果二进制文件不存在,则不是严重错误,我的脚本应该继续运行。

有没有办法首先防止创建这些弹出窗口,或者可以使用批处理/cmd单行程序来异步执行应用程序,这样即使脚本失败也不会阻止其继续运行(我可以轻松地从 CLI 中使用批处理脚本)?

答案1

我无法可靠地保证二进制文件在运行之前存在

您可以使用来which.cmd查看二进制是否存在,并返回适当的ERRORLEVEL


解决问题的方法(禁用“Windows 无法找到‘[foo].exe’”弹出窗口)

  • 跑步which program
  • 检查ERRORLEVEL
  • start仅当program找到时才运行。
:: WHICH.CMD 命令名称 [返回变量]
::
:: 确定要执行的文件的完整路径,如果
:: CommandName 已执行。
::
:: 结果存储在变量 ReturnVar 中,否则
:: 如果未指定 ReturnVar,则回显到 stdout。
::
:: 如果未找到文件,则会向 stderr 回显错误消息。
::
:: ERRORLEVEL 设置为下列值之一
:: 0 - 成功:找到匹配的文件
:: 1 - 未找到文件且 CommandName 是内部命令
:: 2 - 未找到文件且 CommandName 不是内部命令
:: 3 - 语法不正确 - 未指定 CommandName

以下链接包含完整的源代码which.cmd(由超级用户用户德本汉姆)。

来源哪个命令- 显示可执行文件的完整路径。

答案2

一种方法是将二进制文件复制/移动到具有唯一名称的新临时位置并执行它。
如果复制/移动成功,则唯一文件存在,您可以执行它而不会受到“远程文件系统恶作剧”的影响。如果没有,那么至少您知道您不会收到弹出窗口。

答案3

这可以防止阻止批处理脚本的执行,但遗憾的是不能阻止弹出窗口:

start cmd /c start foo

但它解决了阻塞批处理脚本执行的问题。

答案4

使用/C 开关作为启动命令,它应该会跳过烦人的弹出窗口。

启动/C appthatmayfail.exe 参数

相关内容