У меня на Win 7 работает нормально (32 бита)
Вот тривиальный тестовый скрипт
@echo off echo Before pause echo After
Когда я запускаю вышеупомянутое без нажатия <Ctrl-C>
, я получаю следующее:
D:\test>test Before Press any key to continue . . . After D:\test>
Когда я нажимаю <Ctrl-C>
на приглашение «Нажать любую клавишу», я получаю:
D:\test>test Before Press any key to continue . . . Terminate batch job (Y/N)? y D:\test>
РЕДАКТИРОВАТЬ: Решение последующего вопроса
Это не должно быть в цикле. Проблема существует с любым заключенным в скобки блоком кода. Весь блок анализируется за один проход, а затем выполняется из памяти.
( echo Before 1 pause echo Before 2 pause echo After )
Я не думаю, что есть исправление с помощью команды PAUSE. Но у меня есть простое решение, которое должно дать желаемую функциональность отладки. Просто убедитесь, что переменная окружения PAUSE еще не определена, прежде чем запускать скрипт.
@echo off :: ------------------------------------------------------ :: Include this block of code at the top of your script :: setlocal if not defined pause ( set "pause=choice /m "........................Continue "&if errorlevel 2 exit" cmd /c ^""%~f0" %* ^" exit /b ) :: ------------------------------------------------------ :: Now use %pause% instead of pause anywhere you want within your script :: Press Y to continue, N to quit :: The script will immediately terminate if you press N, even if in the :: middle of a CALL :: Here is a simple demonstration call :sub1 exit /b :sub1 call :sub2 exit /b :sub2 for /l %%N in (1 1 3) do ( echo ----- %%N ------ echo Before 1 %pause% echo Before 2 %pause% echo After ) exit /b