Batch file 为什么这个批标记不起作用?

Batch file 为什么这个批标记不起作用?,batch-file,Batch File,我有一个批处理文件,只能打开两个不同文件中的一个,它们是: TeamViewerQS_de.exe TeamViewerQS_en.exe 如果客户安装了*_en.exe,我需要启动该.exe文件: 我得到一个错误,Windows找不到TeamViewerQS_en.exe,尽管我的电脑上存在_de.exe版本。 是否有更好的方法在批处理中区分文件名 start C:\TeamViewerQS_de.exe IF not exist C:\TeamViewerQS_de.exe goto :EN

我有一个批处理文件,只能打开两个不同文件中的一个,它们是:

TeamViewerQS_de.exe TeamViewerQS_en.exe 如果客户安装了*_en.exe,我需要启动该.exe文件:

我得到一个错误,Windows找不到TeamViewerQS_en.exe,尽管我的电脑上存在_de.exe版本。 是否有更好的方法在批处理中区分文件名

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
您需要exit子句忽略以:开头的标签行,并执行start C:\TeamViewerQS_en.exe

您也可以这样做:

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

发生这种情况的原因是,如果存在TeamViewerQS_de.exe版本,则不存在绕过使运行TeamViewerQS_en.exe版本的语句的条件。然后,您可以在if not exist条件中添加一个else块,以跳过启动英文版本的语句。 这是一个工作脚本,其中的编辑包含在起始块和其他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

这样,所有任务的错误级别应保持在0级别;如果此脚本包含在另一个脚本中,使其他操作也喜欢该变量,则此脚本可能会很有用。

谢谢-我理解它现在与start C:\TeamViewerQS_de.exe(如果不存在)一起工作。如果不存在C:\TeamViewerQS_de.exe,则与rudicangiotti编写的C:\TeamViewerQS_en.exe类似。@user3675536这样更好:如果存在C:\TeamViewerQS\u de.exe启动C:\TeamViewerQS\u de.exe其他启动C:\TeamViewerQS\u en.exe
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