2014-01-15 56 views
0

只需要使用相同的腳本在32位和64位系統之間打開文件。所以我想用IF EXISTS來防止cannot locate error
這個腳本應該非常簡單和容易,但我遇到了一些問題。如果現在開始.bat

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正在工作,因爲它是基於操作系統正確尋址的。

任何想法,爲什麼我不能使這個簡單的腳本工作?

回答

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之間的區別在於前者使用單獨的窗口,後者使用相同的窗口 - 保持打開狀態直到完成調用。選擇是你自己想要使用的。

+0

我喜歡你的else語句的合併,並且代碼非常有意義。該文件不會在兩個目錄中存在,但我絕對使用您的輸入。不過,我仍然遇到這種情況: 而不是啓動我的.exe它啓動一個新的命令提示符與位置作爲標題。我爲什麼不知所措。 – SuperFungi

+0

是的,我剛剛意識到實際問題是什麼 - 再看一次。 – unclemeat

+1

謝謝!我看到我的錯誤,這是一個寶貴的教訓。 :) – SuperFungi

0

更簡單:

是否存在路徑\ 1.EXE啓動/等待路徑\的1.exe

其中的1.exe是靜默安裝,也可以使用詳細忽略錯誤