Bedingte PAUSE (nicht in der Kommandozeile)
Möchte ich einen letzten PAUSE
in mein *.bat-Skripts, so kann ich einfach einen Doppelklick auf Sie in Windows-explorer und Sie haben die Möglichkeit zum Lesen der Ausgabe. Jedoch, die Letzte PAUSE ist ein ärgernis, wenn ich das gleiche script von der Kommandozeile aus.
Gibt es eine Möglichkeit zu erkennen, ob wir den Skript aus einer Eingabeaufforderung (oder auch nicht) und legen Sie die PAUSE (oder auch nicht) entsprechend?
(Ziel-Umgebung ist Windows XP und höher.)
Update
Habe ich es geschafft zu Komponieren, das von Anders Antwort:
(((echo.%cmdcmdline%)|find /I "%~0")>nul)
if %errorlevel% equ 0 (
set GUI=1
) else (
set CLI=1
)
Dann kann ich Sachen wie diese:
if defined GUI pause
Du musst angemeldet sein, um einen Kommentar abzugeben.
...NT+ nur, Nein der Ausdruck %cmdcmdline% in Win9x wahrscheinlich.
Wie bereits von E-M in die Kommentare setzen alles auf eine Zeile öffnet sich Ihnen bis auf einige Grenzfälle, wo der Ausdruck %cmdcmdline% wird der Ausstieg aus der Klammer. Die Problemumgehung ist die Verwendung von zwei Linien:
find
zu%WINDIR%\system32\find.exe
, sonst wird es nicht funktionieren, wenn man Cygwin installiert und HinzugefügtPATH
.ECHO.%CMDCMDLINE%|find /I "%~0" >NUL
dannIF NOT ERRORLEVEL 1 PAUSE
Ich bezweifle, dass es da einen Unterschied, weil ich denke, es fängt gerade an einer Eingabeaufforderung, und dann läuft die bat, wenn Sie auf ihn doppelklicken.
Jedoch, wenn Sie Verknüpfungen zu bat-Dateien und gehen Sie auf Eigenschaften, und fügen Sie in einem extra-argument (so etwas wie "/p") in der "Ziel" - Feld, dann könnte man prüfen, ob das argument am Ende des Skripts und pause, wenn es gesetzt ist. Dann läuft aus der Verknüpfung würde dazu führen, dass es zu Ende in eine pause und läuft von der Kommandozeile aus nicht machen würde.
Ich hatte gehofft, die Antwort von @Anders funktionieren würde, in seinem eigenen .bat-Datei. Leider funktioniert es nicht für mich. Basierend auf dem @DarinH Kommentar, vielleicht aber doch für einige. Das folgende Skript sollte die Arbeit für alle, aber erfordert einen zusätzlichen parameter.
Der Schlüssel liegt in der Der Ausdruck %CmdCmdLine% Umgebungsvariable, die ich mir vorstellen könnte, ein bisschen anders für ein paar Grenzfälle.
PauseIfGui.bat
Diese akzeptiert einen optionalen parameter: den vollständigen Pfad des aufrufenden Skripts. Wenn keine Parameter übergeben werden, es läuft das gleiche wie @Anders-Skript.
AnyOtherFile.bat
Beim öffnen aus dem Explorer (z.B. Doppelklick) , AnyOtherFile.Fledermaus-pause machen wird. Wenn Sie von einer Eingabeaufforderung aus, wird es nicht.