Ich finde es %~dp0
sehr nützlich und verwende es häufig, um meine Batch-Dateien portabler zu machen.
Aber das Label selbst scheint mir sehr kryptisch ... Was macht das ~
? Bedeutet dp
Fahrt und Weg? Bezieht sich das 0
auf %0
den Pfad zur Batch-Datei, die den Dateinamen enthält?
Oder ist es nur ein komisches Label?
Ich würde auch gerne wissen, ob es sich um eine dokumentierte Funktion handelt oder um etwas, das veraltet ist.
batch-file
Sebastián Grignoli
quelle
quelle
%~dp0
Beispiel nach . Normalerweise finde ich, dass sich die Top-Hits auf Inhalte auf SO beziehen.Antworten:
Berufung
In der Befehlszeile finden Sie Hilfe zu dieser Syntax (die auch außerhalb von FOR verwendet werden kann. Dies ist nur der Ort, an dem Hilfe gefunden werden kann).
Es gibt verschiedene Buchstaben, die Sie wie
f
für "vollständiger Pfadname",d
für Laufwerksbuchstaben,p
für Pfad verwenden können, und sie können kombiniert werden.%~
ist der Anfang für jede dieser Sequenzen und eine Zahl gibt an, dassI
sie für den Parameter funktioniert%I
(wobei%0
der vollständige Name der Batchdatei ist, genau wie Sie angenommen haben).quelle
I
. Ich muss0
statt verwendenI
. Ich weiß nicht, ob ich etwas verpasst habe oder was auch immer, aber ich lasse die Leute nur wissen.I
ist ein Platzhalter für den Variablenindex.0
= die aufrufende Datei,1
= Argument # 1,2
= Argument # 2, etc ...(Zunächst möchte ich diese nützliche Referenzseite für Batch empfehlen: http://ss64.com/nt/ )
Dann noch eine nützliche Erklärung: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Und eine klarere Referenz von hier :
%CmdCmdLine%
gibt die gesamte Befehlszeile zurück, die an CMD.EXE übergeben wurde%*
gibt den Rest der Befehlszeile ab dem ersten Befehlszeilenargument zurück (in Windows NT 4 enthält% * auch alle führenden Leerzeichen).%~dn
gibt den Laufwerksbuchstaben von% n zurück (n kann zwischen 0 und 9 liegen), wenn% n ein gültiger Pfad oder Dateiname ist (kein UNC)%~pn
gibt das Verzeichnis von% n zurück, wenn% n ein gültiger Pfad oder Dateiname ist (kein UNC)%~nn
gibt den Dateinamen nur von% n zurück, wenn% n ein gültiger Dateiname ist%~xn
gibt die Dateierweiterung von% n nur zurück, wenn% n ein gültiger Dateiname ist%~fn
gibt den vollständig qualifizierten Pfad von% n zurück, wenn% n ein gültiger Dateiname oder ein gültiges Verzeichnis istADD 1
Ich habe gerade eine gute Referenz für den mysteriösen
~
Tilde-Operator gefunden.Die
%~
Zeichenfolge wird als Prozent-Tilde- Operator bezeichnet. Sie finden es in Situationen wie :%~0
.Die
:~
Zeichenfolge wird als Doppelpunkt-Tilde- Operator bezeichnet. Sie können es wie finden%SOME_VAR:~0,-1%
.ADD 2 - 1:12 PM 7/6/2018
%1-%9
Weitere Informationen finden Sie in den Befehlszeilenargumenten. Wenn es sich nicht um gültige Pfadwerte handelt, werden%~dp1
-%~dp9
alle auf denselben Wert wie erweitert%~dp0
. Wenn es sich jedoch um gültige Pfadwerte handelt, werden sie auf ihren eigenen Treiber- / Pfadwert erweitert.Zum Beispiel: (batch.bat)
Lauf 1:
Lauf 2:
quelle
Die Variable
%0
in einem Batch-Skript wird auf den Namen der ausführenden Batch-Datei gesetzt.Die
~dp
spezielle Syntax zwischen dem%
und dem0
besagt im Grunde, dass die Variable erweitert werden soll%0
, um den Laufwerksbuchstaben und den Pfad anzuzeigen, wodurch Sie das aktuelle Verzeichnis erhalten, das die Batchdatei enthält!Hilfe = Link
quelle
%0
direkt im cmd zu testen, ohne eine .bat-Datei auf der lokalen Festplatte zu speichern?% ~ dp0 wird zum aktuellen Verzeichnispfad der laufenden Batchdatei erweitert.
Um ein klares Verständnis zu erhalten, erstellen wir eine Batchdatei in einem Verzeichnis.
mit Inhalt:
Wenn Sie es an der Eingabeaufforderung ausführen, wird folgendes Ergebnis angezeigt:
quelle
Ein weiterer Tipp, der sehr hilfreich wäre, ist, dass man dann zuerst das aktuelle Verzeichnis auf ein anderes Laufwerk setzen
%~d0
musscd %~dp0
. Dadurch wird das Verzeichnis in das Laufwerk der Batchdatei und anschließend in den Ordner geändert.Alternativ wird für #oneLinerLovers, wie @Omni in den Kommentaren hervorhob,
cd /d %~dp0
sowohl das Laufwerk als auch das Verzeichnis geändert :)Hoffe das hilft jemandem.
quelle
cd
hat einen eingebauten Parameter, der sowohl das Laufwerk als auch den Ordner wechselt:cd /d %~dp0
/d
Argument ist hilfreich, aber es verdient, als alternative Antwort für einen Kandidaten und nicht als Kommentar zu dieser Antwort veröffentlicht zu werden. Vielen Dank für den Hinweis, ich wusste nichts davon :)Tolles Beispiel aus dem tragbaren Shell Launcher von Strawberry Perl:
Ich bin mir nicht sicher, was die negative 1 dort selbst macht, aber es ist ein Vergnügen!
quelle
Ein Beispiel wäre schön - hier ist ein triviales
Es werden nur die ERWEITERUNGEN jeder Datei im aktuellen Ordner aufgelistet
Für nützlichere Variablenkombinationen (auch in der vorherigen Antwort aufgeführt) über die CMD-Eingabeaufforderung führen Sie Folgendes aus:
HELP FOR
Dieses Snippet enthältDie Modifikatoren können kombiniert werden, um zusammengesetzte Ergebnisse zu erhalten:
quelle