IF EXIST START .bat

时间:2014-01-15 21:59:28

标签: batch-file if-statement

我只想使用相同的脚本在32位和64位系统之间打开文件。所以我想使用IF EXISTS来阻止cannot locate error 这个脚本应该非常简单易用,但我遇到了一些问题。

if exist "C:\Program Files (x86)\Expro4\Expro4.exe" (
   Start "C:\Program Files (x86)\Expro4\Expro4.exe")

if exist "C:\Program Files\Expro4\Expro4.exe" (
   Start "C:\Program Files\Expro4\Expro4.exe")

我尝试了不同的变化,但这个特别做了一些奇怪的事情。在运行时,它会打开一个发送到该文件位置的命令提示符。我可以说代码的if exist段正在运行,因为它是基于操作系统正确处理的。

为什么我不能使这个简单的脚本工作的任何想法?

2 个答案:

答案 0 :(得分:1)

如果系统是64位,您的示例将运行Expro4.exe两次,如果它存在于两个目录中 - 您应该包含else语句。

但是,您应该使用start -

,而不是使用call
if exist "C:\Program Files (x86)\Expro4\Expro4.exe" (
    Call "C:\Program Files (x86)\Expro4\Expro4.exe"
) else if exist "C:\Program Files\Expro4\Expro4.exe" (
    Call "C:\Program Files\Expro4\Expro4.exe"
)

或者您可以使用start /D "path"

问题在于您使用start -

C:\>start /?
Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.

您的路径被设置为新窗口的标题,并且您实际上并未指定任何脚本在没有/D的情况下启动。

startcall之间的区别在于前者使用单独的窗口而后者使用相同的窗口 - 在呼叫完成之前保持打开状态。您可以选择使用哪种。

答案 1 :(得分:0)

更简单:

如果存在路径\ 1.exe start / wait path \ 1.exe

其中1.exe是静默安装程序,也使用详细来忽略错误