Wie können Sie das Verzeichnis des ausgeführten Skripts abrufen und in der CMD-Datei verwenden?
Wie können Sie das Verzeichnis des ausgeführten Skripts abrufen und in der CMD-Datei verwenden?
Antworten:
Raymond Chen hat einige Ideen:
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
Hier vollständig zitiert, da MSDN-Archive in der Regel etwas unzuverlässig sind:
Der einfache Weg ist die Verwendung der
%CD%
Pseudovariablen. Es wird in das aktuelle Arbeitsverzeichnis erweitert.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Natürlich Verzeichnis speichern / wiederherstellen könnte leichter gemacht habe mit
pushd
/popd
, aber das ist nicht der Punkt hier.)Der
%CD%
Trick ist sogar über die Befehlszeile praktisch. Zum Beispiel befinde ich mich oft in einem Verzeichnis, in dem es eine Datei gibt, mit der ich arbeiten möchte, aber ... oh, ich muss in ein anderes Verzeichnis wechseln, um diesen Vorgang auszuführen.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(Ich verwende es gerne
%_%
als meine Scratch-Umgebungsvariable.)Geben Sie ein
SET /?
, um die anderen vom Befehlsprozessor bereitgestellten Pseudovariablen anzuzeigen.
Auch die Kommentare im Artikel sind es wert, gescannt zu werden, zum Beispiel dieser (über die WayBack-Maschine, da Kommentare aus älteren Artikeln verschwunden sind):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Dies umfasst die Verwendung von% ~ dp0:
Wenn Sie wissen möchten, wo sich die Batchdatei befindet:
%~dp0
%0
ist der Name der Batchdatei.~dp
gibt Ihnen das Laufwerk und den Pfad des angegebenen Arguments an.
Dies entspricht dem Pfad des Skripts:
%~dp0
Dies verwendet die Syntax der Stapelparametererweiterung. Parameter 0 ist immer das Skript selbst.
Wenn Ihr Skript unter gespeichert ist C:\example\script.bat
, wird es %~dp0
ausgewertet C:\example\
.
ss64.com enthält weitere Informationen zur Syntax der Parametererweiterung. Hier ist der relevante Auszug:
Sie können den Wert jedes Parameters mit einem% abrufen, gefolgt von seiner numerischen Position in der Befehlszeile.
[...]
Wenn ein Parameter zur Angabe eines Dateinamens verwendet wird, kann die folgende erweiterte Syntax angewendet werden:
[...]
% ~ d1 Erweitern Sie% 1 nur auf einen Laufwerksbuchstaben - C:
[...]
% ~ p1 Erweitern Sie% 1 nur auf einen Pfad, z. B. \ utils \, einschließlich eines nachgestellten \, der von einigen Befehlen als Escape-Zeichen interpretiert werden kann.
[...]
Die oben genannten Modifikatoren können kombiniert werden:
% ~ dp1 Erweitern Sie% 1 nur auf einen Laufwerksbuchstaben und einen Pfad
[...]
Sie können den Pfadnamen des Batch-Skripts selbst mit% 0 abrufen. Parametererweiterungen können darauf angewendet werden, sodass% ~ dp0 das Laufwerk und den Pfad zum Batch-Skript zurückgibt, z. B. W: \ scripts \