416 Stimmen

Was bedeutet %~d0 in einer Windows-Batch-Datei?

Ich betrachte eine Batch-Datei, in der die folgenden Variablen definiert sind:

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
  • Was tun %~d0 o %~p0 tatsächlich bedeuten?
  • Gibt es eine Reihe von bekannten Werten für Dinge wie das aktuelle Verzeichnis, das Laufwerk oder die Parameter eines Skripts?
  • Gibt es andere ähnliche Abkürzungen, die ich verwenden könnte?

625voto

JacquesB Punkte 40790

Die magischen Variablen % n enthält die Argumente, mit denen die Datei aufgerufen wird: %0 ist der Pfad zur Bat-Datei selbst, %1 ist das erste Argument danach, %2 ist die zweite und so weiter.

Da die Argumente oft Dateipfade sind, gibt es eine zusätzliche Syntax, um Teile des Pfades zu extrahieren. ~d ist Antrieb, ~p ist der Pfad (ohne Laufwerk), ~n ist der Dateiname. Sie können so kombiniert werden ~dp ist Laufwerk+Pfad.

%~dp0 ist daher in einer Fledermaus ziemlich nützlich: Es ist der Ordner, in dem sich die ausführende Fledermausdatei befindet.

Sie können auch andere Arten von Metainformationen über die Datei erhalten: ~t ist der Zeitstempel, ~z ist die Größe.

Siehe aquí für eine Referenz für alle Kommandozeilenbefehle. Die Tilde-Magic-Codes sind beschrieben unter für .

177voto

efotinis Punkte 13896

Es handelt sich um erweiterte variable Substitutionen. Sie ändern die %N-Variablen, die in Batch-Dateien verwendet werden. Sehr nützlich, wenn Sie sich mit Batch-Programmierung unter Windows befassen.

%~I         - expands %I removing any surrounding quotes ("")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

Sie können die oben genannten Informationen finden, indem Sie FOR /? .

55voto

Clewaks Punkte 507

Ja, es gibt noch andere Abkürzungen, die Sie verwenden können, die unten aufgeführt sind. In Ihrem Befehl würde ~d0 für den Laufwerksbuchstaben des 0ten Arguments stehen.

~ expands the given variable
d gets the drive letter only
0 is the argument you are referencing

Da das 0. Argument der Skriptpfad ist, wird der Laufwerksbuchstabe des Pfades für Sie ermittelt. Sie können auch die folgenden Abkürzungen verwenden.

%~1         - expands %1 removing any surrounding quotes (")
%~f1        - expands %1 to a fully qualified path name
%~d1        - expands %1 to a drive letter only
%~p1        - expands %1 to a path only
%~n1        - expands %1 to a file name only
%~x1        - expands %1 to a file extension only
%~s1        - expanded path contains short names only
%~a1        - expands %1 to file attributes
%~t1        - expands %1 to date/time of file
%~z1        - expands %1 to size of file
%~$PATH:1   - searches the directories listed in the PATH
               environment variable and expands %1 to the fully
               qualified name of the first one found.  If the
               environment variable name is not defined or the
               file is not found by the search, then this
               modifier expands to the empty string    

%~dp1       - expands %1 to a drive letter and path only
%~nx1       - expands %1 to a file name and extension only
%~dp$PATH:1 - searches the directories listed in the PATH
               environment variable for %1 and expands to the
               drive letter and path of the first one found.
%~ftza1     - expands %1 to a DIR like output line

Dies kann auch direkt in der Eingabeaufforderung gefunden werden, wenn Sie CALL /? oder FOR /? ausführen.

13voto

William Keller Punkte 5148

De Dateinamen-Parsing in Batch-Dateien und weitere Idiome - Real's How-to :

Der Pfad (ohne Laufwerk), in dem sich das Skript befindet: ~p0

Das Laufwerk, auf dem sich das Skript befindet: ~d0

11voto

Marvin Thobejane Punkte 1900

Ein weiterer Tipp, der sehr hilfreich sein kann, ist, das aktuelle Verzeichnis auf einen unterschiedlicher Antrieb müsste man verwenden %~d0 zuerst, dann cd %~dp0 . Dadurch wird das Verzeichnis in das Laufwerk der Stapeldatei und dann in den entsprechenden Ordner geändert.

Für #oneLinerLovers, cd /d %~dp0 wird sowohl das Laufwerk als auch das Verzeichnis ändern :)

Ich hoffe, das hilft jemandem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X