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

时间:2014-08-27 10:58:11

标签: batch-file

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

  • TeamViewerQS_的 .EXE
  • TeamViewerQS_的 EN .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的错误,我的电脑上存在_ de .exe版本。 有没有更好的方法来批量区分文件名?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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级的所有任务;如果此脚本包含在另一个脚本中,这也可能非常有用,这使得其他操作也可以使用该变量。