Befehlszeile .cmd / .bat-Skript, wie Verzeichnis der laufenden Skript zu erhalten

StackOverflow https://stackoverflow.com/questions/130112

  •  02-07-2019
  •  | 
  •  

Frage

Wie können Sie das Verzeichnis des Skripts erhalten, die ausgeführt wurde und es in der .cmd-Datei verwenden?

War es hilfreich?

Lösung

Raymond Chen hat ein paar Ideen:

  

https://devblogs.microsoft.com/oldnewthing/20050128- 00 /? p = 36573

hier Zitiert in voller weil MSDN Archive sind in der Regel etwas unzuverlässig sein:

  

Der einfachste Weg ist das %CD% pseudo-Variable zu verwenden. Es dehnt sich auf die   aktuelles Arbeitsverzeichnis.

     

set OLDDIR=%CD%
  .. do stuff ..
  chdir /d %OLDDIR% &rem restore current directory

     

(Natürlich Verzeichnis speichern / wiederherstellen könnte leichter haben   wurde mit pushd / popd getan, aber das ist nicht der Punkt hier.)

     

Der %CD% Trick ist praktisch auch von der Kommandozeile. Zum Beispiel habe ich   finde mich oft in einem Verzeichnis, in dem eine Datei gibt es, die ich mag   operieren, aber ... oh, ich brauche, um ein anderes Verzeichnis chdir   diese Operation auszuführen.

     

set _=%CD%\curfile.txt
  cd ... some other directory ...
  somecommand args %_% args

     

(Ich mag %_% als meine scratch Umgebungsvariable verwenden.)

     

Typ SET /? die anderen pseudo-Variablen durch den Befehl zur Verfügung gestellt, um zu sehen   Prozessor.

Auch die Kommentare in dem Artikel wert sind das Scannen zum Beispiel diese eine (über die Wayback Machine, da Kommentare von älteren Artikel verschwunden sind):

  

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Dies umfasst die Verwendung von% ~ dp0:

  

Wenn Sie wissen wollen, wo die Batch-Datei lebt: %~dp0

     

%0 ist der Name der Batchdatei. ~dp gibt Ihnen das Laufwerk und den Pfad von   das angegebene Argument.

Andere Tipps

Dies entspricht den Pfad des Skripts:

%~dp0

Hier wird die Batch-Parameter Erweiterung Syntax. Parameter 0 ist immer das Skript selbst.

Wenn Ihr Skript auf C:\example\script.bat gespeichert wird, dann %~dp0 ausgewertet C:\example\.

ss64.com hat weitere Informationen über die Parameter Erweiterung Syntax. Hier ist der relevante Auszug:

  

Sie können den Wert eines Parameters bekommen% durch seine numerische Position in der Befehlszeile gefolgt werden.

     

[...]

     

Wenn ein Parameter verwendet, um einen Dateinamen zu liefern, dann wird die folgende erweiterte Syntax angewandt werden kann:

     

[...]

     

% ~ d1 Expand% 1 zu einem Laufwerksbuchstabe nur - C:

     

[...]

     

% ~ p1 Expand% 1 auf einen Pfad nur z.B. \ Utils \ Dazu gehören ein abschließendes \, die als Escape-Zeichen durch einige Befehle interpretiert werden kann.

     

[...]

     

Die Modifikatoren oben können kombiniert werden:

     

% ~ DP1 Expand% 1 zu einem Laufwerksbuchstaben und Pfad

     

[...]

     

Sie können den Pfad der Batch-Skript erhalten sich mit% 0, Parametern Erweiterungen können auf dieses so% ~ dp0 das Laufwerk und Pfad zum Batch-Skript wird wieder zum Beispiel angewandt werden W: \ Scripts \

for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Quelle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top