Befehlszeile .cmd / .bat-Skript, wie Verzeichnis der laufenden Skript zu erhalten
-
02-07-2019 - |
Frage
Wie können Sie das Verzeichnis des Skripts erhalten, die ausgeführt wurde und es in der .cmd-Datei verwenden?
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%