Форум «Всё о Паскале» _ Ада и другие языки _ запуск программ из командного файла
Автор: *оля* 20.03.2012 21:50
Здравствуйте. Нужно в зависимости от выбранного пункта меню запустить то или иное приложение. Однако при запуске сразу открывается первое приложение и больше ничего не делается. в чем ошибка?
Код
echo off goto choice :choice cls echo 1) WINMINE echo 2) SOLITER echo 3) PAINT echo 4) QUIT PROGRAMM choice /c:1234 CLICK ON ONE KEY FROM LIST if errorlevel 4 goto question if errorlevel 3 goto paint if errorlevel 2 goto sol if errorlevel 1 goto winmine :winmine c:\windows\system32\winmine.exe goto choice :sol C:\WINDOWS\system32\sol.exe goto choice :paint C:\WINDOWS\system32\mspaint.exe goto choice :question cls echo QUIT?? choice /c:yn if errorlevel 2 goto choice if errorlevel 1 goto quit :quit exit
заранее спасибо.
Автор: IUnknown 20.03.2012 22:08
Ты под какой Windows это тестируешь? CHOICE уже под XP отсутствует. Вместо него используется set /p
Автор: Lapp 21.03.2012 9:44
Володь, ты что-то путаешь.. SET действительно можно использовать для этих целей (начиная с Win2K), но CHOICE таки никто не отменял.
Оля, а ты вообще смотрела синтаксис команды choice? Извини, я немного удивлен, что у тебя такие ляпы - ты уж вроде съела пару шавок в программинге.. )) Во-первых, отсутствует ключ мессаджа, во-вторых мессадж должен быть в кавычках, если он содержит пробелы:
choice /c:1234 /m "CLICK ON ONE KEY FROM LIST"
Далее, если ты не хочешь остаться в вызываемой проге до завершения ее работы, то конечно же надо использовать start. Короче, вот как-то так:
echo off rem goto choice :choice cls echo 1) WINMINE echo 2) SOLITER echo 3) PAINT echo 4) QUIT PROGRAMM choice /c:1234 /m "CLICK ON ONE KEY FROM LIST" if errorlevel 4 goto question if errorlevel 3 goto paint if errorlevel 2 goto sol if errorlevel 1 goto winmine :winmine start winmine.exe goto choice :sol start sol.exe goto choice :paint start mspaint.exe goto choice :question cls echo QUIT?? choice /c:yn if errorlevel 2 goto choice if errorlevel 1 goto quit :quit exit
Я тут убрал пути к прогам - нельзя же так наивно, c:\windows - используй переменные окружения, %WinDir% и т.д., или уж полагайся на PATH (как сделал я). Еще один совет - не надо называть метки именами команд, себя же запутываешь. Сделай program_choice, run_winmine - например..
P.S. Да, и добавь еще пару проверок на выход - они, что - сдурели? выходить из такой замечательной программы?!?!?!?!?! А в строке "echo QUIT??" не хватает одиннадцати вопросительных знаков и тринадцати восклицательных (английский давно повторяла?)). Этих трататаханных юзеров надо постоянно по башке лупить, они это страсть как любють и жить без того не можуть..
P.P.S. В качестве отладчика - включай эхо на отдельных участках (а для начала ВООБЩЕ не выключай его нигде).
Автор: IUnknown 21.03.2012 14:46
Цитата(Lapp @ 21.03.2012 4:44)
Володь, ты что-то путаешь.. SET действительно можно использовать для этих целей (начиная с Win2K), но CHOICE таки никто не отменял.
У меня на машине с XP вызов CHOICE не отработал, в списке http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx#ETAA его тоже нет. Отработало вот так:
Код
echo off :choice cls echo 1) WINMINE echo 2) SOLITER echo 3) PAINT echo 4) QUIT PROGRAMM
set /p a="CLICK ON ONE KEY FROM LIST " if "%a%" == "4" goto question if "%a%" == "3" goto paint if "%a%" == "2" goto sol if "%a%" == "1" goto winmine :winmine start /wait winmine.exe goto choice :sol start /wait sol.exe goto choice :paint start /wait mspaint.exe goto choice :question cls set /p a="Quit?" if "%a%" == "n" goto choice :quit
(выходить EXIT-ом по метке quit не стал для целей отладки, start /wait - чтобы дожидаться завершения одной программы, и только потом запускать другую, а не мешать все в одну кучу)