2014-08-27 84 views
1

我有一個批處理文件只打開的兩個不同的文件,這是一個:爲什麼這個批處理標記不起作用?

  • TeamViewerQS_ 的.exe
  • TeamViewerQS_ 連接的.exe

如果客戶有安裝*_en.exe,我需要開始.exe文件:

start C:\TeamViewerQS_de.exe 
if not exist C:\TeamViewerQS_de.exe goto :EN 

:EN 
start C:\TeamViewerQS_en.exe 

我收到Windows無法找到的錯誤TeamViewerQS_ en .exe,despiste _ de .exe版本存在於我的電腦上。 有沒有更好的方法來批量區分文件名?

回答

0
start C:\TeamViewerQS_de.exe 
IF not exist C:\TeamViewerQS_de.exe goto :EN 
:: goto :eof also can be used instead of exit 
exit /b 0 
:EN 
start C:\TeamViewerQS_en.exe 

你需要退出條款的標籤(從:線)被忽略,start C:\TeamViewerQS_en.exe將被執行。

你也可以這樣做:

start C:\TeamViewerQS_de.exe 2>nul || start C:\TeamViewerQS_en.exe 

link

+0

謝謝你 - 我unterstand現在 還曾與啓動C:\ TeamViewerQS_de.exe 如果不存在C:\ TeamViewerQS_de.exe否則C:\ TeamViewerQS_en.exe像rudicangiotti所著。 – user3675536 2014-08-27 11:38:55

+0

@ user3675536它會更好,如下所示:'if exists「C:\ TeamViewerQS_de.exe」start「C:\ TeamViewerQS_de.exe」else start「C:\ TeamViewerQS_en.exe」 – npocmaka 2014-08-27 11:40:54

0

這是因爲,如果TeamViewerQS_de.exe版本存在,不存在繞過,使得運行TeamViewerQS_en.exe版本的語句的條件。然後,您可以將一個else塊添加到if not exist條件以跳過啓動英文版本的語句。 這裏是一個工作的腳本,與包括在條件分支的起始塊和其他goto語句之前編輯:

if exist C:\TeamViewerQS_de.exe goto :DE else goto :EN 

:DE 
start C:\TeamViewerQS_de.exe 
goto :EOF 
:EN 
start C:\TeamViewerQS_en.exe 
:EOF 
echo Task accomplished 
pause 

這樣的ERRORLEVEL應保持在0級別的所有任務;如果這個腳本被另一個腳本包含在另一個腳本中,那麼這個腳本會很有用,這個腳本也會使其他操作對該變量感興趣。