Wie können Sie das Verzeichnis des ausgeführten Skripts abrufen und in der .cmd-Datei verwenden?Befehlszeile .cmd/.bat-Skript, wie Sie ein Verzeichnis des laufenden Skripts erhalten
Antwort
Raymond Chen hat ein paar Ideen:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx
hier Zitiert in voller weil MSDN Archive sind in der Regel etwas unzuverlässig sein:
Der einfache Weg, die zu benutzen ist
%CD%
Pseudovariable. Es erweitert sich um das aktuelle Arbeitsverzeichnis .
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Natürlich Verzeichnis/save leichter mit
pushd
/popd
gemacht wurde wieder herstellen könnte, aber das ist nicht der Punkt hier.)Der
%CD%
Trick ist praktisch sogar von der Kommandozeile aus. Zum Beispiel, I oft finde ich mich in einem Verzeichnis, in dem es eine Datei gibt, die ich operieren möchte, aber ... oh, ich muss Chdir zu einem anderen Verzeichnis in der Reihenfolge , um diesen Vorgang durchzufü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 Prozessor zu sehen.
auch die Kommentare in dem Artikel wert sind Scannen zum Beispiel diese:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
dies die Verwendung von% deckt ~ dp0:
Wenn Sie möchten wissen, wo die Batch-Datei lebt:
%~dp0
%0
ist der Name der Stapeldatei.~dp
gibt Ihnen das Laufwerk und den Pfad von das angegebene Argument.
Dies beantwortet die Frage nicht. % CD% gibt das aktuelle Verzeichnis an, während das Verzeichnis des Skripts gefragt wurde. – ketorin
** @ Ketorin: ** Dies ** beantwortet ** die Frage. % CD% wird sich ändern, wenn das Skript selbst das Verzeichnis während seiner Verwendung ändert (pushd/cd/..), aber **% ~ dp0 ** wird ** NOT ** ändern und immer auf den Ort zeigen, an dem sich das Skript befindet. – Jay
-1 Ich kann nicht sagen, ob das die Frage beantwortet oder nicht. Kannst du mir ein Beispiel zeigen? –
Dieser auf den Pfad des Skripts äquivalent:
%~dp0
Dies verwendet die Batch-Parameter Erweiterung Syntax. Parameter 0 ist immer das Skript selbst.
Wenn Ihr Skript unter C:\example\script.bat
gespeichert ist, wird %~dp0
als C:\example\
ausgewertet.
ss64.com enthält weitere Informationen zur Syntax der Parametererweiterung. Hier ist der relevante Auszug:
Sie können den Wert eines beliebigen Parameters mit einem% erhalten, gefolgt von seiner numerischen Position in der Befehlszeile.
[...]
Wenn ein Parameter einen Dateinamen zu liefern, dann kann die folgende erweiterte Syntax angewandt werden verwendet:
[...]
% ~ d1 Expandieren% 1 nur zu einem Laufwerksbuchstabe - C:
[...]
% ~ p1% erweitert 1 auf einen Pfad nur zB \ utils \ Dies beinhaltet ein abschließendes \, das von einigen Befehlen als Escape-Zeichen interpretiert werden kann.
[...]
Die Modifikatoren oben können kombiniert werden:
% ~ DP1% erweitern 1 einen Laufwerkbuchstaben und Pfad von
[...]
Sie können den Pfadnamen des Batch-Skripts selbst mit% 0 abrufen, Parametererweiterungen können auf diesen Parameter angewendet werden, so dass% ~ dp0 das Laufwerk und den Pfad zum Batch-Skript zurückgibt, z W: \ Scripts \
Genau das, was ich brauchte. Und ich verlinkte diese anwser zu meinem Blog, als Erinnerung :) –
Nicht sicher, ob es ein Fehler/Fehler im zitierten Text ist, aber in meinem Skript brauche ich "% ~ d0", um den Laufwerksbuchstaben zu erhalten! % ~ d1 ist in meinem Fall leer. – eftokay83
In meinen Augen/Situation ist dies der akzeptierten Antwort überlegen.Wenn Sie ein Befehlszeilenskript "als Administrator" ausführen (Rechtsklick darauf), wird Ihr Skript von Windows \ system32 ausgeführt. Die angenommene Antwort gibt Ihnen NICHT den Speicherort des Skripts, es gibt Ihnen wieder Windows \ system32. I.e. Diese Antwort hilft Ihnen, das Problem zu beheben. Sie starten Ihr Skript mit cd% ~ dp0 –
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%
- 1. Verzeichnis des laufenden Skripts in Fisch Shell
- 2. Verzeichnis des laufenden Programms unter Linux?
- 3. Wie bekommst du den Pfad des laufenden Skripts in groovy?
- 4. Wie finde ich das Verzeichnis des laufenden Python-Skripts im Skript?
- 5. VBScript: Wie erhalten Sie den vollständigen Pfad des laufenden Prozesses?
- 6. So erhalten Sie den Pfad des ausgeführten eingefrorenen Skripts
- 7. Öffnen Sie ein Jupyter-Notebook innerhalb des laufenden Servers von der Befehlszeile aus
- 8. So erhalten Sie den Dateinamen des Skripts in V8
- 9. Was ist der Vorteil des Python-Skripts über die Befehlszeile?
- 10. Wie bekomme ich den Pfad des aktuell laufenden Skripts mit Javascript?
- 11. Ausführen eines Sqlite3-Skripts über die Befehlszeile
- 12. Suchen nach Verzeichnis des laufenden Prozess EXE in
- 13. Linux-Befehlszeile jedes Verzeichnis öffnen
- 14. Aufbrechen des SQL-Skripts
- 15. HTML analysieren, um den Variablenwert des Skripts zu erhalten
- 16. wie Verzeichnis mit der Windows-Befehlszeile wechseln
- 17. Erhalten Sie ein bestimmtes Wort des Satzes
- 18. Wechseln Sie in das Verzeichnis eines Python-Skripts
- 19. erhalten alle laufenden Prozesse Informationen mit QProcess
- 20. Wie erhalten Sie in ASP.NET MVC den Dateinamen des ausgeführten Skripts?
- 21. Wie kann man Änderungen im Verlauf des PHP-Skripts beobachten?
- 22. Abrufen des übergeordneten Verzeichnisses des Skripts
- 23. Wie Lade Reihenfolge des Skripts in RequireJS
- 24. Erster Unicode-Pfad des laufenden Skript
- 25. Erhalten Sie zur Zeit laufenden MLM-Namen in Arden
- 26. Matlab laden Datei im Pfad des Skripts
- 27. Ausführen eines Python-Skripts über die Befehlszeile in Windows
- 28. Wie im Verzeichnis des Projektes
- 29. Erster Tag des laufenden Jahres
- 30. Wie bekomme ich das Verzeichnis des PowerShell-Skripts, das ich ausführe?
möglich Duplikat [? Wie den Pfad der Batch-Skript in Windows erhalten] (http://stackoverflow.com/questions/3827567/how- to-get-the-Pfad-des-Batch-Skript-in-Windows) – Celada