2016-10-28 4 views
0

Здравствуйте я построить меню, как этотДля/F держать выход Errorlevel ЕХЕ

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 

Теперь я заменил его для цикла, но im отсутствует уровень ошибок 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 прыжковых метки (до 255 ERRORLEVEL в wselect.exe)

Но мне нужно только 8 % errorlevel% для работы, потому что каждый другой должен перейти к той же процедуре.

В принципе мне нужно установить jumpmarks для первых линий Menu.txt (blanklines игнорируются)

для всех остальных линий мне нужно такое же jumpmark.

FYI Мой сценарий работает как задумано, но я люблю errorevels и ненавижу свое собственное решение: D

ответ

0

Вы делаете это сами слишком сложно с цикл, пример снабжен wselect дает хороший пример использования меню в петля.

wselect.exe устанавливает сам уровень ошибок, нет необходимости создавать или выполнять пакетный файл. В самой простой форме это работает, если у вас есть 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 

Ваш цикл не работает для получения ErrorLevel, потому что Равен известно лишь после того, как команда выполнена, и весь цикл рассматривается как одна команда , поэтому вы получите только уровень ошибок предыдущего вызова. Вместо этого я перечисляю файл меню, чтобы найти текст в строке с номером = errorlevel

+0

Это не помогает. Мне нужен выбранный элемент в строке. Wselect может производить до 255 уровней ошибок. Мне нужен только уровень ошибок из 8 строк из первых 10 строк. – xTcisloVe

+0

Я понимаю первую часть и адаптировал свой ответ, чтобы отразить это, в последней части вашего комментария я не получаю – peter

+0

Im редактируя вопрос, который я думаю, тогда вы поймете мою проблему. Кстати, ваш код создает ошибку, но я не получаю, как я должен получить вывод из wselect.exe с вашим кодом. – xTcisloVe