Funciona bem para mim no Win 7 (32 bits)
Aqui está um script de teste trivial
@echo off
echo Before
pause
echo After
Quando executo o acima sem pressionar <Ctrl-C>
, recebo o seguinte:
D:\test>test
Before
Press any key to continue . . .
After
D:\test>
Quando pressiono <Ctrl-C>
no prompt "Pressione qualquer tecla", recebo:
D:\test>test
Before
Press any key to continue . . .
Terminate batch job (Y/N)? y
D:\test>
EDIT: Solução para a questão de acompanhamento
Não precisa estar em loop. O problema existe com qualquer bloco de código entre parênteses. O bloco inteiro é analisado em uma passagem e executado a partir da memória.
(
echo Before 1
pause
echo Before 2
pause
echo After
)
Eu não acho que há uma correção usando o comando PAUSE. Mas eu tenho uma solução simples que deve dar a funcionalidade de depuração que você deseja. Apenas certifique-se de que a variável de ambiente PAUSE ainda não esteja definida antes de executar seu script.
@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