【发布时间】:2018-08-21 14:36:01
【问题描述】:
我想制作一个批处理文件,用于检测目录中是否存在名为 lang-XX.txt 的文件,XX 将是 EN(英语)、FR(法语)等语言代码。
但是,我不想使用多个if exist lang-XX.txt 命令,例如:
if exist lang-US.txt goto launchGame
if exist lang-FR.txt goto launchGame
if exist lang-DE.txt goto launchGame
if exist lang-IT.txt goto launchGame
if exist lang-JP.txt goto launchGame
if exist lang-PL.txt goto launchGame
if exist lang-RU.txt goto launchGame
if exist lang-ES.txt goto launchGame
rem This will set game language and launch the game on the 'launchGame' section
所以,我想把它变成这样:
set "lang=US=FR=DE=IT=JP=PL=RU=ES"
if exist lang-%lang%.txt goto launchGame
当然,它不会起作用,因为有多个lang 变量,输入echo %lang% 将导致US=FR=DE=IT=JP=PL=RU=ES。那么,我该如何让它发挥作用呢?
这是我当前的完整批处理文件:
@echo off
title Saints Row IV Launcher
:checkLang
set "lang=US=FR=DE=IT=JP=PL=RU=ES"
if exist lang-%lang%.txt goto launchGame
:startMenu
echo/
echo This is a launcher + language changer for Saints Row IV.
echo Your selected language will be saved to "lang-XX.txt" file.
echo/
echo This launcher will read from it so you don't need to change the
echo language again every time you launch the game using this launcher.
echo Please make sure that you have write access to this directory!
echo/
echo Avaiable languages:
echo 1) English
echo 2) French
echo 3) German
echo 4) Italian
echo 5) Japanese
echo 6) Polish
echo 7) Russian
echo 8) Spanish
echo/
set "lang="
set /P "menu=Please type the number correctly: "
if not defined %lang% goto checkLang
if "%menu%"=="1" set lang=US
if "%menu%"=="2" set lang=FR
if "%menu%"=="3" set lang=DE
if "%menu%"=="4" set lang=IT
if "%menu%"=="5" set lang=JP
if "%menu%"=="6" set lang=PL
if "%menu%"=="7" set lang=RU
if "%menu%"=="8" set lang=ES
:launchGame
rem Will detect if 'lang-XX.txt' file existed, if not, make a new 'lang-XX.txt' file
if not exist lang-%lang%.txt type nul >lang-%lang%.txt
rem Start the game with %lang% parameter...
start "" "Saints Row IV.exe" -localize_language %lang%
如果可能,如果一个目录上存在多个 lang-XX.txt 文件(例如:lang-EN.txt 和 lang-JP.txt),我如何使批处理文件显示错误或goto XXXXX而不是继续这个过程?
【问题讨论】:
-
请注意,
if not exist lang-%lang%.txt type nul >lang-%lang%.txt中的第一个 %lang% 将是 8 种语言(EN、FR、DE 等)中的任何一种,但第二个 %lang%(type nul >lang-%lang%.txt中)将是只有一种(不是全部 8 种语言)。我认为您需要将此命令分成 2 个命令(或更多) -
这个怎么样:
for %%I in (US FR DE IT JP PL RU ES) do if exist "lang-%%I.txt" goto launchGame? -
所以.. 如果我
set lang=%%I会使用使用if exist "lang-%%I.txt检测到的语言之一还是会导致错误?如果有 2 个 lang-XX.txt 文件怎么办? (我的第二个问题是可选的) -
是的,
set "lang=%%I"会将lang设置为找到的第一个语言代码。我的代码只是替换了您的第一个代码片段,它不会检测是否有多个语言文件,但是可以这样做,例如:set "lang=" & for %%I in (US FR DE IT JP PL RU ES) do if exist "lang-%%I.txt" if defined lang (goto :someErrorRoutine) else set "lang=%%I",然后是if defined lang (goto :launchGame) else rem no language defined。 -
命令
if defined lang (goto :someErrorRoutine)是干什么用的?因为我认为你已经在开始时将它设置为 NULL 所以它总是不会被定义(直到下一个set lang=%%I命令)
标签: batch-file command