Помощь - Поиск - Пользователи - Календарь
Полная версия: запуск программ из командного файла
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
*оля*
Здравствуйте.
Нужно в зависимости от выбранного пункта меню запустить то или иное приложение. Однако при запуске сразу открывается первое приложение и больше ничего не делается. в чем ошибка?
Код
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
Ты под какой Windows это тестируешь? CHOICE уже под XP отсутствует. Вместо него используется set /p
Lapp
Володь, ты что-то путаешь.. 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
Цитата(Lapp @ 21.03.2012 4:44) *
Володь, ты что-то путаешь.. SET действительно можно использовать для этих целей (начиная с Win2K), но CHOICE таки никто не отменял.
У меня на машине с XP вызов CHOICE не отработал, в списке Command-line reference A-Z его тоже нет. Отработало вот так:

Код
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 - чтобы дожидаться завершения одной программы, и только потом запускать другую, а не мешать все в одну кучу)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.