Я разрабатываю сложный, длительный пакетный скрипт и столкнулся с небольшой проблемой при отладке. У меня есть окно командной строки, открытое для корневого пути скрипта, поэтому я могу напечатать myscript.bat
чтобы запустить его для тестирования. Я использую команды PAUSE
между операторами для наблюдения за поведением скрипта. Однако я обнаружил, что ввод CTRL+C во время команды PAUSE
для отмены выполнения просто интерпретируется как ключ для продолжения выполнения, а не как нарушение сценария, как предполагалось.
Я знаю, что могу просто убить / закрыть командное окно, но немного раздражает каждый раз возвращаться к правильному пути в новом командном окне. Есть ли способ правильно прервать выполнение пакетного скрипта, пока он находится в состоянии PAUSE
?
Изменить: похоже, что PAUSE
отлично работает в простых сценариях, как указано @dbenham. Однако, если у вас есть несколько операторов PAUSE
вложенных в итерацию FOR
, вы не можете прерваться в середине итерации FOR
- только в конце. Вот пример сценария, который демонстрирует проблему:
@echo off
for /l %%y in (2008, 1, 2013) do (
echo 1
pause
echo 2
pause
echo 3
pause
echo 4
pause
echo 5
pause
)
Если вы попытаетесь завершить какое-либо из первых четырех утверждений PAUSE
, вы обнаружите, что ваша команда terminate игнорируется и выполнение все равно продолжается. Но как только вы достигнете конца, к пятой PAUSE
вы получите запрос на завершение (в приведенном ниже примере я нажимал CTRL+C в каждом приглашении):
Z:\>test
1
Press any key to continue . . .
2
Press any key to continue . . .
3
Press any key to continue . . .
4
Press any key to continue . . .
5
Press any key to continue . . .
Terminate batch job (Y/N)? y
Есть идеи, как предотвратить такое поведение?