Frage Was bedeutet% ~ dp0 und wie funktioniert es?


ich finde %~dp0 sehr nützlich, und ich benutze es sehr, um meine Batch-Dateien tragbarer zu machen.

Aber das Etikett selbst scheint mir sehr kryptisch zu sein ... was ist das? ~ tun? tut dp mittlere Fahrt und Weg? macht das 0 beziehen auf %0, der Pfad zur Stapeldatei, die den Dateinamen enthält?

Oder ist es nur ein komisches Label?

Ich würde auch gerne wissen, ob es sich um ein dokumentiertes Feature handelt oder etwas, das dazu neigt, veraltet zu sein.


810
2018-02-17 20:15


Ursprung


Antworten:


Berufung

for /?

in der Befehlszeile gibt Hilfe zu dieser Syntax (die auch außerhalb von FOR verwendet werden kann, ist dies genau der Ort, an dem Hilfe gefunden werden kann).

Zusätzlich Substitution von FOR   Variable Referenzen wurde verbessert.   Sie können jetzt das folgende optionale verwenden   Syntax:

%~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

Die Modifikatoren können kombiniert werden, um zu erhalten   zusammengesetzte Ergebnisse:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

In den obigen Beispielen können% I und PATH   durch andere gültige Werte ersetzt werden.   Die% ~ Syntax wird mit einem gültigen beendet   Für Variablennamen. Kommissionierung Großbuchstaben   Variablennamen wie% I machen es mehr   lesbar und vermeidet Verwirrung mit dem   Modifikatoren, die kein Fall sind   empfindlich.

Es gibt verschiedene Buchstaben, die Sie verwenden können f für "vollständiger Pfadname", d für Laufwerksbuchstaben, p für den Weg, und sie können kombiniert werden. %~ ist der Anfang für jede dieser Sequenzen und eine Nummer I bezeichnet es funktioniert auf den Parameter %I (woher %0 ist der vollständige Name der Batch-Datei, genau wie Sie angenommen haben).


648
2018-02-17 20:19



(Zuerst möchte ich diese nützliche Referenzseite für den Batch empfehlen: http://ss64.com/nt/)

Dann noch eine nützliche Erklärung: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

Die Variable% ~ dp0

Die Variable% ~ dp0 (das ist eine Null), wenn sie innerhalb eines Windows referenziert wird   Batch - Datei wird auf die erweitert dBrief und path dieser Charge   Datei.

Die Variablen% 0-% 9 beziehen sich auf die Kommandozeilenparameter des Stapels   Datei. % 1-% 9 beziehen sich auf Befehlszeilenargumente nach dem Stapeldateinamen.   % 0 bezieht sich auf die Batch-Datei selbst.

Wenn Sie dem Prozentzeichen (%) mit einem Tilde-Zeichen (~) folgen,   Sie können einen oder mehrere Modifizierer vor der Parameternummer einfügen, um den Parameter zu ändern   So wird die Variable erweitert. Der Modifikator d wird auf das Laufwerk erweitert   Buchstabe und der Modifikator p wird auf den Pfad des Parameters erweitert.

Beispiel: Nehmen wir an, Sie haben ein Verzeichnis auf C: bat_files und   In diesem Verzeichnis befindet sich eine Datei namens example.bat. In diesem Fall% ~ dp0   (Kombinieren der Modifikatoren d und p) wird zu C: \ bat_files erweitert.

Auschecken dieser Microsoft-Artikel für eine vollständige Erklärung.

Überprüfen Sie auch dieser Forum-Thread.

Und eine klarere Referenz von Hier:

  • %CmdCmdLine%    gibt die gesamte Befehlszeile zurück, die an CMD.EXE übergeben wurde

  • %*  gibt den Rest der Befehlszeile zurück, beginnend mit dem ersten Befehlszeilenargument (in Windows NT 4 enthält% * auch alle führenden Leerzeichen)

  • %~dngibt den Laufwerksbuchstaben von% n zurück (n kann zwischen 0 und 9 liegen), wenn% n ein gültiger Pfad oder Dateiname ist (keine UNC)

  • %~pn    gibt das Verzeichnis von% n zurück, wenn% n ein gültiger Pfad oder Dateiname ist (kein UNC)

  • %~nn    gibt nur den Dateinamen von% n zurück, wenn% n ein gültiger Dateiname ist

  • %~xn    gibt die Dateierweiterung nur von% n 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 ist

ADD 1

Habe gerade eine gute Referenz für die gefunden geheimnisvoll  ~ Tilde-Operator.

Das %~ Zeichenfolge wird aufgerufen Prozent Tilde Operator. Sie können es in Situationen wie finden: %~0.

Das :~ Zeichenfolge wird aufgerufen Doppelpunkt Operator. Sie können es wie finden %SOME_VAR:~0,-1%.

ADD 2 - 1:12 PM 7/6/2018

%1-%9 Beziehen Sie sich auf die Befehlszeilenargumente. Wenn sie sind nicht gültige Pfadwerte, %~dp1 - %~dp9 werden alle auf denselben Wert wie erweitert %~dp0. Aber wenn sie sind Gültige Pfadwerte, zu denen sie expandieren ihre eigenen Treiber / Pfad-Wert.

Beispielsweise: (Stapel.bat)

@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on

Lauf 1:

D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\

Lauf 2:

D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\

243
2018-04-24 01:51



http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

Die Variable %0 In einem Batch-Skript wird der Name der ausführenden Batch-Datei festgelegt. Das ~dp spezielle Syntax zwischen den % und das 0 sagt im Grunde, die Variable zu erweitern %0 um den Laufwerksbuchstaben und Pfad anzuzeigen, der Ihnen das aktuelle Verzeichnis mit der Batch-Datei liefert!


137
2018-02-17 20:28



Ein weiterer Tipp, der sehr hilfreich wäre, ist das Setzen des aktuellen Verzeichnisses auf a andere Fahrt man müsste benutzen %~d0 Zuerst, dann cd %~dp0. Dadurch wird das Verzeichnis in das Laufwerk der Stapeldatei geändert und dann in den Ordner gewechselt.

Alternativ für #oneLinerLovers, wie @Omni in den Kommentaren darauf hingewiesen hat cd /d %~dp0 wird sowohl das Laufwerk als auch das Verzeichnis ändern :)

Hoffe, das hilft jemandem.


30
2017-09-14 08:54



% ~ dp0 wird zum aktuellen Verzeichnispfad der laufenden Batchdatei erweitert.

Um ein klares Verständnis zu erhalten, erstellen wir eine Batch-Datei in einem Verzeichnis.

C: \ script \ test.bat

mit Inhalt:

@echo off
echo %~dp0

Wenn Sie es über die Eingabeaufforderung ausführen, sehen Sie folgendes Ergebnis:

C: \ Skript \


30
2017-11-25 08:44



Ein gutes Beispiel aus dem tragbaren Shell-Launcher von Strawberry Perl:

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

Ich bin mir nicht sicher, was die negativen 1 da selbst machen, aber es funktioniert ein Vergnügen!


20
2017-09-25 18:39



Ein Beispiel wäre schön - hier ist ein triviales Beispiel

for %I in (*.*) do @echo %~xI

Es listet nur die EXTENSIONS jeder Datei im aktuellen Ordner auf

Für nützlichere Variablenkombinationen (die auch in der vorherigen Antwort aufgeführt sind) aus der CMD-Eingabeaufforderung ausführen: HELP FOR welches dieses Snippet enthält

Die Modifikatoren können kombiniert werden, um zusammengesetzte Ergebnisse zu erhalten:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

10
2018-06-21 16:31