Es funktioniert gut für mich unter Win 7 (32 Bit)
Hier ist ein triviales Testskript
@echo off echo Before pause echo After
Wenn ich den obigen Vorgang ohne Drücken ausführte <Ctrl-C>
, erhalte ich Folgendes:
D:\test>test Before Press any key to continue . . . After D:\test>
Wenn ich <Ctrl-C>
bei der Eingabeaufforderung " Drücken Sie eine beliebige Taste" drücke, bekomme ich:
D:\test>test Before Press any key to continue . . . Terminate batch job (Y/N)? y D:\test>
EDIT: Lösung für Folgefrage
Es muss nicht in einer Schleife sein. Das Problem besteht bei jedem geklammerten Codeblock. Der gesamte Block wird in einem Durchgang analysiert und dann aus dem Speicher ausgeführt.
( echo Before 1 pause echo Before 2 pause echo After )
Ich glaube nicht, dass es eine Lösung gibt, die den Befehl PAUSE verwendet. Aber ich habe eine einfache Lösung, die die gewünschte Debug-Funktionalität bieten sollte. Stellen Sie nur sicher, dass die PAUSE-Umgebungsvariable nicht bereits definiert ist, bevor Sie Ihr Skript ausführen.
@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