2013-05-21 3 views
3

Я написал командный файл MS DOS, который запускает ряд команд.Условные выражения в пакетном файле

Каждая команда вызывает программу с определенными параметрами. Чтобы автоматизировать это, я объединил все команды.

Структура пакетного файла, как показано ниже:

@echo off 
if %1 == "b1" (
command 1 
command 2 
command 3 
.... 
) else (
command a 
command b 
command c 
) 

Я призываю его, как показано ниже:

test.bat b1 

Если я прохожу b1 в качестве аргумента в пакетный файл, он будет обрабатывать последовательность команд, команду 1, команду 2, команду 3 и так далее.

Точно так же, если я хочу, чтобы выполнить ряд команд, указанных в разделе еще, я прохожу еще один аргумент:

test.bat abc 

Поскольку аргумент, передаваемый в пакетный файл не равен b1, он начнет выполняя раздел else командного файла. Здесь аргумент, который я передаю (в данном случае, abc), требуется командами, командой a, командой b, командой c и т. Д. В качестве параметра.

Все это работает очень хорошо.

Однако проблема, с которой я столкнулась, заключается в том, что если я хочу завершить пакетный файл между ними (нажав Ctrl + C), он не запрашивает меня с опцией: вы хотите завершить операцию пакетной обработки? Y/N

например, скажем, командный файл обрабатывает серию команд в разделе else. В настоящее время предположим, что он выполняет команду a. Если я нажму Ctrl + C, то вместо запроса отменить операцию он отменяет выполнение команды a и автоматически переходит к команде b. Если я снова нажму Ctrl + C, он отменяет команду b и продолжит команду c и так далее.

Теперь, с другой стороны, если я пишу пакетный файл, как показано ниже:

@echo off 
command a 
command b 
command c 

и я призываю его из командной строки, как:

test.bat abc 

Теперь, когда я нажимаю Ctrl + C во время выполнения командного файла, он предлагает мне отменить пакетную операцию, как ожидалось.

Похоже, что когда я добавляю условный оператор в пакетном файле, функциональность Ctrl + C каким-то образом изменяется.

Как исправить эту проблему?

Спасибо.

+0

Нажмите на значок закрытия окна, а не нажимайте кнопку C. Или прочитайте справку из «CMD /?», Чтобы узнать, можете ли вы изменить обработку управления C/Break. Возможно, что использование 'start '"/b/w command1' будет работать. – foxidrive

ответ

2

Я попробовал это, и это, казалось, работали, как и ожидалось:

@echo off 
if "x%1x" == "xb1x" (
    echo yes it is 
    dir 
    ... 
) else (
    echo no it is not 
    dir 
    ... 
) 

(где ... повторяет предыдущую пару строк в 100 раз, чтобы дать вам время, чтобы нажать Ctrl - C). I сделал получить подсказку, хотя разрыв произошел внутри if ...else.

Так что я подозреваю, что есть что-то необычное в командах, которые вы используете, а поведение if - это красная селедка. В частности, как вы говорите, они запускают программы, я ожидаю, что Ctrl - C передается непосредственно программе, которая запускается, а не в пакетный файл, который его запускал.

+0

Спасибо. Да, кажется, что Ctrl + C передается программе, которую я вызываю в пакетном файле, вместо того, чтобы предлагать мне завершить операцию пакетной обработки. Таким образом, это специфично для программы, которую я запускаю. –

Смежные вопросы