Batch file 批处理文件-如果不是;选择01“;至;选择99“;转到XXX?

Batch file 批处理文件-如果不是;选择01“;至;选择99“;转到XXX?,batch-file,if-statement,Batch File,If Statement,因此,我最近创建了一个带有菜单的批处理文件,允许用户输入0-17之间的数字,但如果用户输入其他内容(不是数字0-17)或输入空值,我希望将批处理文件设置为goto startProg。在我当前的批处理文件中,它将把空值和其他输入传递到下一个部分(:changeLang部分) 我的批处理文件: ::================================================================= :startProg @echo off title The Sims

因此,我最近创建了一个带有菜单的批处理文件,允许用户输入0-17之间的数字,但如果用户输入其他内容(不是数字0-17)或输入空值,我希望将批处理文件设置为
goto startProg
。在我当前的批处理文件中,它将把空值和其他输入传递到下一个部分(
:changeLang
部分)

我的批处理文件:

::=================================================================
:startProg
@echo off
title The Sims 4 Language Changer
set lang=en_US
cls
::=================================================================
:menuList
echo This program will help you to change The Sims 4 language
echo Please run this program with Administrative Privileges!
echo Anyway, what's your choice, captain?
echo.
echo 0. None (Clear Registry)
echo 1. American English
echo 2. Czech (Czechia)
echo 3. Danish (Denmark)
echo 4. German (Germany)
echo 5. European Spanish
echo 6. Finnish (Finland)
echo 7. French (France)
echo 8. Italian (Italy)
echo 9. Japanese (Japan)
echo 10. Korean (South Korea)
echo 11. Dutch (Netherlands)
echo 12. Norwegian (Norway)
echo 13. Polish (Poland)
echo 14. Portuguese (Brazil)
echo 15. Russian (Russia)
echo 16. Swedish (Sweden)
echo 17. Chinese (Taiwan)
echo.
set choice=
set /p choice=Please type the number correctly:
if "%choice%"=="0" goto clearLang
if "%choice%"=="1" set lang=en_US
if "%choice%"=="2" set lang=cs_CZ
if "%choice%"=="3" set lang=da_DK
if "%choice%"=="4" set lang=de_DE
if "%choice%"=="5" set lang=es_ES
if "%choice%"=="6" set lang=fi_FI
if "%choice%"=="7" set lang=fr_FR
if "%choice%"=="8" set lang=it_IT
if "%choice%"=="9" set lang=ja_JP
if "%choice%"=="10" set lang=ko_KR
if "%choice%"=="11" set lang=nl_NL
if "%choice%"=="12" set lang=no_NO
if "%choice%"=="13" set lang=pl_PL
if "%choice%"=="14" set lang=pt_BR
if "%choice%"=="15" set lang=ru_RU
if "%choice%"=="16" set lang=sv_SE
if "%choice%"=="17" set lang=zh_TW
cls
::=================================================================
:changeLang
> "%temp%\language.reg" echo REGEDIT4
>>"%temp%\language.reg" echo.
>>"%temp%\language.reg" echo [HKEY_LOCAL_MACHINE\SOFTWARE\Maxis\The Sims 4]
>>"%temp%\language.reg" echo "Locale"="%lang%"
>>"%temp%\language.reg" echo.
>>"%temp%\language.reg" echo [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Maxis\The Sims 4]
>>"%temp%\language.reg" echo "Locale"="%lang%"
>>"%temp%\language.reg" echo.
regedit /S "%temp%\language.reg" >nul
"%windir%\regedit.exe" /S "%temp%\language.reg" >nul
del /F /Q "%temp%\language.reg" >nul
cls
::=================================================================
:finalStep
echo The Sims 4 language changed to %lang%!
pause
exit
::=================================================================
:clearLang
reg delete "HKLM\SOFTWARE\Maxis\The Sims 4" /F
reg delete "HKLM\SOFTWARE\Wow6432Node\Maxis\The Sims 4" /F
cls
echo The Sims 4 registry data cleared!
pause
exit
问题是我不想改变:

如果“%choice%”==“XX”设置lang=XXXXX

致:

如果“%choice%”==“XX”转到XXXXX

因为它会创建许多
转到XXX
部分,从而使我的批处理文件变大


我也不想创建多个
if not
命令,因为它效率不高。

这是我使用以下命令的方式:


这是我使用以下工具进行操作的方式:


我会在
if
查询之前清除变量
lang
,然后在未定义lang的情况下放入
,如下所示:

::=================================================================
:startProg
@回音
标题:模拟人生4语言转换器
cls
::=================================================================
:menuList
echo此程序将帮助您更改模拟人生4语言
echo请以管理权限运行此程序!
不管怎样,你的选择是什么,船长?
回音/
回声0。无(清除注册表)
回声1。美式英语
回声2。捷克(捷克)
回声3。丹麦人(丹麦)
回声4。德语(德国)
回声5。欧洲西班牙语
回声6。芬兰语(芬兰)
回声7。法语(法国)
回声8。意大利语(意大利)
回声9。日语(日本)
回声10。韩国人(韩国)
回声11。荷兰(荷兰)
回声12。挪威(挪威)
回声13。波兰(波兰)
回声14。葡萄牙语(巴西)
回声15。俄罗斯(俄罗斯)
回声16。瑞典人(瑞典)
回声17。中文(台湾)
回音/
设置“lang=”
设置“选择=”
set/P choice=“请正确键入号码:”
如果“%choice%”==“0”转到:clearLang
如果“%choice%”==“1”设置“lang=en\u US”
如果“%choice%”==“2”设置“lang=cs\u CZ”
如果“%choice%”==“3”设置“lang=da_DK”
如果“%choice%”==“4”设置“lang=de_de”
如果“%choice%”==“5”设置“lang=es”
如果“%choice%”==“6”设置“lang=fi\u-fi”
如果“%choice%”==“7”设置“lang=fr\u fr”
如果“%choice%”==“8”设置“lang=it\u it”
如果“%choice%”==“9”设置“lang=ja\u JP”
如果“%choice%”==“10”设置“lang=ko_KR”
如果“%choice%”==“11”设置“lang=nl\u nl”
如果“%choice%”==“12”设置“lang=no\u no”
如果“%choice%”==“13”设置“lang=pl\u pl”
如果“%choice%”==“14”设置“lang=pt\u BR”
如果“%choice%”==“15”设置“lang=ru\u ru”
如果“%choice%”==“16”设置“lang=sv\u SE”
如果“%choice%”==“17”设置“lang=zh_TW”
如果未定义lang goto:startProg
cls
::=================================================================
:changeLang
>%temp%\language.reg(
echo REGEDIT4
回音/
echo[HKEY\U LOCAL\U MACHINE\SOFTWARE\Maxis\The Sims 4]
echo“Locale”=%lang%
回音/
echo[HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Maxis\The Sims 4]
echo“Locale”=%lang%
回音/
)
regedit/S“%temp%\language.reg”>nul
%windir%\regedit.exe”/S“%temp%\language.reg”>nul
删除/F/Q“%temp%\language.reg”>nul
cls
::=================================================================
:最后一步
回显模拟人生4语言更改为%lang%!
暂停
退出/B
::=================================================================
:clearLang
reg删除“HKLM\SOFTWARE\Maxis\TheSims4”/F
reg删除“HKLM\SOFTWARE\Wow6432Node\Maxis\TheSims4”/F
cls
回显Sims 4注册表数据已清除!
暂停
退出/B
此外,我更改了以下内容:

  • 使用引号中的
    set
    语法,如`set“VAR=Value”,以保护特殊字符并避免意外的不可见尾随空格
  • 要输出空行,请使用
    echo/
    ,因为如果存在文件
    echo.
    (无扩展名),则
    echo.
    可能会失败
  • 使用单个
    >
    重定向代替多个
    >
    重定向,因此执行单个I/O操作
  • exit
    已替换为
    exit/B
    ,以便退出批处理文件,而不是宿主
    cmd
    实例
我会在
if
查询之前清除变量
lang
,然后在未定义lang
的情况下放入
,如下所示:

::=================================================================
:startProg
@回音
标题:模拟人生4语言转换器
cls
::=================================================================
:menuList
echo此程序将帮助您更改模拟人生4语言
echo请以管理权限运行此程序!
不管怎样,你的选择是什么,船长?
回音/
回声0。无(清除注册表)
回声1。美式英语
回声2。捷克(捷克)
回声3。丹麦人(丹麦)
回声4。德语(德国)
回声5。欧洲西班牙语
回声6。芬兰语(芬兰)
回声7。法语(法国)
回声8。意大利语(意大利)
回声9。日语(日本)
回声10。韩国人(韩国)
回声11。荷兰(荷兰)
回声12。挪威(挪威)
回声13。波兰(波兰)
回声14。葡萄牙语(巴西)
回声15。俄罗斯(俄罗斯)
回声16。瑞典人(瑞典)
回声17。中文(台湾)
回音/
设置“lang=”
设置“选择=”
set/P choice=“请正确键入号码:”
如果“%choice%”==“0”转到:clearLang
如果“%choice%”==“1”设置“lang=en\u US”
如果“%choice%”==“2”设置“lang=cs\u CZ”
如果“%choice%”==“3”设置“lang=da_DK”
如果“%choice%”==“4”设置“lang=de_de”
如果“%choice%”==“5”设置“lang=es”
如果“%choice%”==“6”设置“lang=fi\u-fi”
如果“%choice%”==“7”设置“lang=fr\u fr”
如果“%choice%”==“8”设置“lang=it\u it”
如果“%choice%”==“9”设置“lang=ja\u JP”
如果“%choice%”==“10”设置“lang=ko_KR”
如果“%choice%”==“11”设置“lang=nl\u nl”
如果“%choice%”==“12”设置“lang=no\u no”
如果“%choice%”==“13”设置“lang=pl\u pl”
如果“%choice%”==“14”设置“lang=pt\u BR”
如果“%choice%”==“15”设置“lang=ru\u ru”
如果“%choice%”==“16”设置“lang=sv\u SE”
如果“%choice%”==“17”设置“lang=zh_TW”
如果没有定义lang g
@echo off
setlocal EnableDelayedExpansion

title The Sims 4 Language Changer
cls

::=================================================================
:menuList
echo This program will help you to change The Sims 4 language
echo Please run this program with Administrative Privileges!
echo Anyway, what's your choice, captain?
echo/

rem Create the "lang" array at same time that the menu is displayed
echo 0. None (Clear Registry)

set "n=0"
for %%a in ("American English:en_US"
            "Czech (Czechia):cs_CZ"
            "Danish (Denmark):da_DK"
            "German (Germany):de_DE"
            "European (Spanish):es_ES"
            "Finnish (Finland):fi_FI"
            "French (France):fr_FR"
            "Italian (Italy):it_IT"
            "Japanese (Japan):ja_JP"
            "Korean (South Korea):ko_KR"
            "Dutch (Netherlands):nl_NL"
            "Norwegian (Norway):no_NO"
            "Polish (Poland):pl_PL"
            "Portuguese (Brazil):pt_BR"
            "Russian (Russia):ru_RU"
            "Swedish (Sweden):sv_SE"
            "Chinese (Taiwan):zh_TW"    ) do (
   for /F "tokens=1,2 delims=:" %%b in (%%a) do (
      set /A n+=1
      echo !n!. %%b
      set "lang[!n!]=%%c"
   )
)

echo/
set "choice="
set /P "choice=Please type the number correctly: "
if not defined lang[%choice%] goto XXXX
if "%choice%"=="0" goto clearLang
set "lang=!lang[%choice%]!"

cls
::=================================================================
:changeLang
(
    echo REGEDIT4
    echo/
    echo [HKEY_LOCAL_MACHINE\SOFTWARE\Maxis\The Sims 4]
    echo "Locale"="%lang%"
    echo/
    echo [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Maxis\The Sims 4]
    echo "Locale"="%lang%"
    echo/
) > "%temp%\language.reg"

regedit /S "%temp%\language.reg" >nul
"%windir%\regedit.exe" /S "%temp%\language.reg" >nul
del /F /Q "%temp%\language.reg" >nul
cls

::=================================================================
:finalStep
echo The Sims 4 language changed to %lang%!
pause
exit

::=================================================================
:clearLang
reg delete "HKLM\SOFTWARE\Maxis\The Sims 4" /F
reg delete "HKLM\SOFTWARE\Wow6432Node\Maxis\The Sims 4" /F
cls
echo The Sims 4 registry data cleared!
pause
exit