IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> запуск программ из командного файла, command.com
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 125
Пол: Женский

Репутация: -  1  +


Здравствуйте.
Нужно в зависимости от выбранного пункта меню запустить то или иное приложение. Однако при запуске сразу открывается первое приложение и больше ничего не делается. в чем ошибка?
Код
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


заранее спасибо.

Сообщение отредактировано: *оля* -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Ты под какой Windows это тестируешь? CHOICE уже под XP отсутствует. Вместо него используется set /p
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Володь, ты что-то путаешь.. 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.
В качестве отладчика - включай эхо на отдельных участках (а для начала ВООБЩЕ не выключай его нигде).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата(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 - чтобы дожидаться завершения одной программы, и только потом запускать другую, а не мешать все в одну кучу)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 18:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name