您好我构建了一个这样的菜单
Select a mod from list below or select an option[1-4]:
[ 1 ] [Start Uncooking]
[ 2 ] [Browse computer for cooked mod]
[ 3 ] [Change cooked mods list folder]
[ 4 ] [Exit]
Cooked mods list folder:
D:\Spiele\The Witcher 3 Wild Hunt GOTY\Mods\:
"all folders of the above folder in one line like":
Mod1
Mod2
etc.
我正常地使用它:
call %wselectEXE% %menuTXT% "Quick Mod Tool Uncook Menu" "set userinput=%listfolder%$item" "Uncook Menu" /menu /oemlist /oemout /margin /cmdCenter /grid /fs=12 /dx=485 /dy=180 > %userinputBAT%
if %errorlevel%==0 del %menuTXT% & del %userselectionBAT% & del %userselectionlistBAT% & cls & goto :QuickModToolsMenu
if %errorlevel%==1 goto :UncookMenu
if %errorlevel%==2 goto :UncookMenu
if %errorlevel%==3 del %menuTXT% & goto :UncookAction
if %errorlevel%==4 goto :BrowseForModunCookMenu
if %errorlevel%==5 goto :ChangeListFolder
if %errorlevel%==6 del %menuTXT% & del %userselectionBAT% & del %userselectionlistBAT% & cls & goto :QuickModToolsMenu
if %errorlevel%==7 goto :UncookMenu
if %errorlevel%==8 goto :UncookMenu
if %errorlevel%==9 goto :UncookMenu
if %errorlevel%==10 (goto :UncookMenu) else goto :UncookMenuSub
现在我用for循环替换它但是我错过了wselect.exe的错误级别。
我为此得到了一个解决方法:
for /f "usebackq delims=" %%a in (`"wselect.exe Menu.txt "Quick Mod Tool Uncook Menu" "$item" "Uncook Menu" /menu /fs=12 /dx=485 /dy=180 /oemlist /oemout /margin /cmdCenter /grid"`) do (set "modname=%%a") & set "userinput=%listfolder%%%a"
if "%userinput%" == "%listfolder%" del %menuTXT% & del %userselectionBAT% & del %userselectionlistBAT% & cls & goto :QuickModToolsMenu
if "%userinput%" == "%listfolder%Select a mod from list below or select an option[1-4]:" goto :UncookMenu
if "%userinput%" == "%listfolder%[ 1 ] [Start Uncooking]" del %menuTXT% & goto :UncookAction
if "%userinput%" == "%listfolder%[ 2 ] [Browse computer for cooked mod]" goto :BrowseForModunCookMenu
if "%userinput%" == "%listfolder%[ 3 ] [Change cooked mods list folder]" goto :ChangeListFolder
if "%userinput%" == "%listfolder%[ 4 ] [Exit]" del %menuTXT% & del %userselectionBAT% & del %userselectionlistBAT% & cls & goto :QuickModToolsMenu
if "%userinput%" == "%listfolder%Cooked mods list folder:" goto :UncookMenu
if "%userinput%" == "%listfolder%%listfolder%:" goto :UncookMenu
goto :UncookMenuSub
有没有办法回到orignal%errorlevel%输出?
请记住goto_%errorlevel%不是这里的一个选项,因为如果我这样构建我将不得不定义255个跳转标签(wselect.exe中最多255个错误级别)
但是我只需要8%的errorlevel%来处理,因为其他所有人都应该跳转到同一个程序。
基本上我需要为Menu.txt的第一行设置跳转标记(空白行被忽略)
对于所有其他行,我需要相同的跳转标记。
仅供参考我的剧本按预期工作,但我喜欢错误并讨厌我自己的解决方案:D
答案 0 :(得分:0)
使用for循环你自己太难了,wselect提供的例子给出了一个在循环中使用菜单的好例子。
wselect.exe设置了errorlevel本身,无需创建或执行批处理文件。如果您的menu.txt包含以下内容,则最简单的形式如下所示。
Menuitem1
Menuitem2
Quit
在同一个文件夹中
@echo off
setLocal EnableDelayedExpansion
:menu
wselect.exe menu.txt "My menu title"
set line=0
for /f "delims=" %%l in (menu.txt) do (
set /a line+=1
if !line!==%errorlevel% (
set item=%%l
)
)
goto item%errorlevel%
:item1
echo selected %item% with errorlevel %errorlevel%
goto menu
:item2
echo selected %item% with errorlevel %errorlevel%
goto menu
:item3
goto quit
:quit
你的for循环不能用于获取errorlevel,因为只有在命令执行后才知道errorlevel,并且整个for循环被认为是一个命令,所以你只能获得前一次调用的errorlevel。 相反,我枚举菜单文件以在number = errorlevel
的行中查找文本