webentwicklung-frage-antwort-db.com.de

Was bedeutet% ~ d0 in einer Windows-Batchdatei?

Ich schaue auf eine Batch-Datei, die die folgenden Variablen definiert:

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
  • Was tun %~d0 oder %~p0 eigentlich?
  • Gibt es eine Reihe bekannter Werte für Dinge wie aktuelles Verzeichnis, Laufwerk, Parameter eines Skripts?
  • Gibt es ähnliche Verknüpfungen, die ich verwenden könnte?
330
Chris Smith

Die magischen Variablen % n enthält die zum Aufrufen der Datei verwendeten Argumente: %0 ist der Pfad zur bat-Datei selbst, %1 ist das erste Argument nach, %2 ist der zweite und so weiter.

Da die Argumente häufig Dateipfade sind, gibt es einige zusätzliche Syntax zum Extrahieren von Teilen des Pfads. ~d ist Laufwerk, ~p ist der Pfad (ohne Laufwerk), ~n ist der Dateiname. Sie können so kombiniert werden ~dp ist Laufwerk + Pfad.

%~dp0 ist daher in einem 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 abrufen: ~t ist der Zeitstempel, ~z ist die Größe.

Suchen Sie hier nach einer Referenz für alle Befehlszeilenbefehle. Die Tilde-Magic-Codes sind unter für beschrieben.

496
JacquesB

Sie sind erweiterte Variablensubstitutionen. Sie ändern die in Batch-Dateien verwendeten% N-Variablen. Sehr nützlich, wenn Sie sich mit Batch-Programmierung in Windows beschäftigen.

%~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 finden, indem Sie FOR /? .

141
efotinis

Ja, es gibt andere Verknüpfungen, die Sie verwenden können, die unten angegeben sind. In Ihrem Befehl würde ~ d0 den Laufwerksbuchstaben des 0. Arguments bedeuten.

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

Da das 0-te Argument der Skriptpfad ist, erhält es den Laufwerksbuchstaben des Pfads für Sie. Sie können auch die folgenden Verknüpfungen 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 finden Sie auch direkt in der Eingabeaufforderung, wenn Sie CALL /? oder für /?

48
Clewaks

From Dateinamenanalyse in Batch-Datei und mehr Redewendungen - Real's How-to:

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

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

10
William Keller

Ein weiterer Tipp, der sehr hilfreich wäre, ist der, dass zum Festlegen des aktuellen Verzeichnisses auf ein anderes Laufwerk ein verwendet werden müsste. %~d0 zuerst, dann cd %~dp0. Dadurch wird das Verzeichnis auf das Laufwerk der Stapeldatei und anschließend auf den Ordner der Stapeldatei geändert.

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

Hoffe das hilft jemandem.

9

%~d0 gibt Ihnen den Laufwerksbuchstaben des Arguments 0 (den Skriptnamen), %~p0 der Weg.

7
Armin Ronacher

Einige Fallstricke, auf die Sie achten sollten:

Wenn Sie doppelklicken , wird die Batch-Datei %0 In Anführungszeichen gesetzt. Wenn Sie diese Datei beispielsweise als c:\test.bat Speichern:

@echo %0
@pause

Ein Doppelklick darauf öffnet eine neue Eingabeaufforderung mit Ausgabe:

"C:\test.bat"

Wenn Sie jedoch zuerst eine Eingabeaufforderung öffnen und diese direkt von dieser Eingabeaufforderung aus aufrufen, verweist %0 Auf das, was Sie eingegeben haben . Wenn Sie test.bat EingebenEnter, die Ausgabe von %0 enthält keine Anführungszeichen, da Sie keine Anführungszeichen eingegeben haben:

c:\>test.bat
test.bat

Wenn Sie test eingebenEnter, die Ausgabe von %0 hat ebenfalls keine Erweiterung, da Sie keine Erweiterung eingegeben haben:

c:\>test
test

Gleiches gilt für tEsTEnter:

c:\>tEsT
tEsT

Wenn Sie "test" EingebenEnter, die Ausgabe von %0 enthält Anführungszeichen (da Sie sie eingegeben haben), aber keine Erweiterung:

c:\>"test"
"test"

Wenn Sie schließlich "C:\test.bat" Eingeben, sieht die Ausgabe genauso aus, als hätten Sie darauf doppelt geklickt:

c:\>"C:\test.bat"
"C:\test.bat"

Beachten Sie, dass dies nicht alle möglichen Werte %0 Sein können, da Sie das Skript aus anderen Ordnern aufrufen können:

c:\some_folder>/../teST.bAt
/../teST.bAt

Alle oben gezeigten Beispiele wirken sich auch auf %~0 Aus, da die Ausgabe von %~0 Einfach die Ausgabe von %0 Minus Anführungszeichen (falls vorhanden) ist.

6
Pacerier

Dieser Code erklärt die Verwendung des Zeichens ~ tilda, was für mich am verwirrendsten war. Sobald ich das verstanden habe, ist es viel einfacher, die Dinge zu verstehen:

@ECHO off
SET "PATH=%~dp0;%PATH%"
ECHO %PATH%
ECHO.
CALL :testargs "these are days" "when the brave endure"
GOTO :pauseit
:testargs
SET ARGS=%~1;%~2;%1;%2
ECHO %ARGS%
ECHO.
exit /B 0
:pauseit
pause
3
djangofan

Es zeigt den aktuellen Speicherort der Datei oder des Verzeichnisses an, in dem Sie sich gerade befinden. Wenn sich Ihre Batch-Datei im Desktop-Verzeichnis befand, würde "% ~ dp0" das Desktop-Verzeichnis anzeigen. Wenn Sie möchten, dass das aktuelle Verzeichnis mit dem aktuellen Dateinamen angezeigt wird, können Sie "% ~ dp0% ~ n0% ~ x0" eingeben.

0
zask