禁用“Windows无法找到'[foo] .exe'”弹出窗口


1

我用的时候 start 在批处理脚本中命令启动程序,我希望程序以异步方式启动;这恰好就像我预期的那样,如果我启动的程序存在的话。

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

有没有办法防止这些弹出窗口首先被创建,或者可以用于异步执行应用程序的批处理/ cmd单行程序,如果失败则不会阻止脚本继续执行(我可以从CLI作为批处理脚本轻松使用)?


也许你可以 START 另一个bat脚本本身启动可执行文件而没有 START 因为在这种情况下,第二个shell应该只是打印错误。
tkausl

Answers:


2

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

你可以使用 which.cmd 查看二进制文件是否存在,并返回一个合适的 ERRORLEVEL


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

  • which program
  • 检查 ERRORLEVEL
  • start 除非 program 找到了。
:: WHICH.CMD  CommandName  [ReturnVar]
::
::  Determines the full path of the file that would execute if
::  CommandName were executed.
::
::  The result is stored in variable ReturnVar, or else it is
::  echoed to stdout if ReturnVar is not specified.
::
::  If no file is found, then an error message is echoed to stderr.
::
::  The ERRORLEVEL is set to one of the following values
::    0 - Success: A matching file was found
::    1 - No file was found and CommandName is an internal command
::    2 - No file was found and CommandName is not an internal command
::    3 - Improper syntax - no CommandName specified

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

资源 which.cmd - 显示可执行文件的完整路径。


这不行。我已经知道如何检查文件的存在,但就像现在一样,我无法可靠地验证文件的存在,因为 我无法在检查文件和执行文件之间暂时锁定文件, 并且批处理脚本将在一个有点不堪重负的系统上运行。我的问题是让cmd停止阻止我的批处理脚本在不可避免地发生故障时执行。
The name's Bob. MS Bob.

2

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


1
你需要使用吗? xcopy 获得成功的回报价值?
Engineer Toast

-1

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

start / C appthatmayfail.exe args


我没有听说过 /C 切换之前,找不到它的文档。你能分享你的文件吗?
Engineer Toast

start 没有 /c 选项。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.