Wie kann ich die Ausführung nur bei einem neuen Fenster „pausieren“?

Wie kann ich die Ausführung nur bei einem neuen Fenster „pausieren“?

Ich habe ein Batch-Skript erstellt, das davon ausgeht, %1dass es sich um einen Pfad zu einer Datei handelt. Manchmal möchte ich dieses Batch-Skript per Drag & Drop im Windows Explorer verwenden (indem ich meine Zieldatei auf meine Batch-Skriptdatei ziehe), und manchmal möchte ich dieses Batch-Skript aus einem vorhandenen Eingabeaufforderungsfenster ausführen und meinen %1Pfad explizit angeben (normalerweise nur einen relativen Pfad).

Ich möchte nicht, dass mein Skript beim Ziehen und Ablegen sofort verschwindet, daher muss ich pause. Ich möchte jedoch nicht jedes Mal drücken müssen, any key to continuewenn ich ein vorhandenes Eingabeaufforderungsfenster verwende, daher möchte ich nicht pause.

Gibt es eine Möglichkeit, das Beste aus beiden Welten zu haben? Kann ich das Szenario, in dem ich mich befinde, irgendwie erkennen/daraus schließen und danach entscheiden, ob ich pausieren möchte oder nicht? Was ist hier der beste Ansatz?

Antwort1

Versuchen Sie, Folgendes in Ihrer Batchdatei zu verwenden:

set arg0=%0
if [%arg0:~2,1%]==[:] pause

Dadurch wird überprüft, ob das 3. Zeichen des 0. Arguments (im Wesentlichen der Batchdateiname selbst) ein Doppelpunkt ist oder nicht.

Normalerweise wird etwas, das Sie per Drag-and-Drop in eine Batchdatei ziehen, folgendermaßen aufgerufen: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ...Wenn wir jedoch eine Batchdatei aus der Eingabeaufforderung ausführen, neigen wir im Allgemeinen nicht dazu, sie so aufzurufen, mit einem in Anführungszeichen gesetzten absoluten Pfad. Daher können wir diesen Unterschied ausnutzen und pausenur ausführen, wenn der Doppelpunkt als drittes Zeichen vorhanden ist, was bedeutet, dass die Batchdatei per Drag-and-Drop ausgeführt wurde. Wenn Sie einen in Anführungszeichen gesetzten absoluten Pfad verwenden, um die Batchdatei aus der Eingabeaufforderung auszuführen, wird dies natürlich pauseebenfalls der Fall sein.

Antwort2

Fügen Sie am Ende Ihres Skripts ein ein cmd /k. In einem vorhandenen Fenster wird einfach zur Eingabeaufforderung zurückgekehrt, und in einem neuen Fenster wird dasselbe getan, wobei das Fenster geöffnet bleibt.

@echo off
echo "some text"
cmd /k

Beachten Sie, dass /k den Ausdruck von Folgendem verhindert:

Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

verwandte Informationen