Abrufen des Verzeichnisses mit dem aktuell ausgeführten Stapelskript

30

Ich benutze %0in Batch-Datei, um das enthaltende Verzeichnis der Batch-Datei zu erhalten, aber das Ergebnis ist:

c:\folder1\folder2\batch.bat

Ich möchte nur das Verzeichnis, ohne Batch-Dateinamen, wie folgt: -

c:\folder1\folder2\

Wie kann ich es tun? Vielleicht sollte ich den Pfad filtern. Wenn ja, wie kann ich das machen?

Mohammad AL-Rawabdeh
quelle
Wenn Sie% 0 in einer Batchdatei als Teil einer Befehlszeile verwenden, sollten Sie% 0 \ .. \ RestOfStuff verwenden. Der doppelte Punkt setzt den Dateinamen zurück.
John Gardeniers
Das Verzeichnis mit dem aktuell ausgeführten Skript muss nicht unbedingt mit dem aktuellen Arbeitsverzeichnis (CD) identisch sein! Ich habe die Frage entsprechend bearbeitet - nun wird der Begriff "aktuelles Verzeichnis" vermieden.
Chiccodoro

Antworten:

52
%~p0

Gibt nur den Pfad zurück.

%~dp0

Gibt den Laufwerks- + Pfad zurück.

Weitere Informationen zu diesem Thema finden Sie auf der Microsoft-Website .

Informationen zu dieser Syntax finden Sie auch in der Hilfe zum Befehl for, der for /?unter einem Windows-Betriebssystem ausgeführt wird.

Bart De Vos
quelle
2
Als weitere Referenzquelle wird die gleiche Liste von Variablen Substitutionen auch bei der Eingabe angezeigtfor /?
Kevin
% ~ dp0 gibt das Verzeichnis der ausführenden Batchdatei an. Befindet sich die Batch-Datei in einem anderen Verzeichnis, erhalten Sie dieses andere Verzeichnis. % CD% gibt Ihnen immer das aktuelle Verzeichnis.
Mihai Danila
@MihaiDanila, nein, das hat OP nicht gefragt.
Bart De Vos
Eigentlich bin ich auf diese Frage gekommen, als ich nach einer Möglichkeit gesucht habe, das aktuelle Verzeichnis zu finden. Dies war der erste Treffer bei Google. Der Titel sagt offensichtlich aktuelles Verzeichnis, obwohl Sie über den Inhalt recht haben. Wir haben beide Recht, aber ich denke, dass wir uns mehr damit befassen, was die Frage tatsächlich vermittelt, obwohl sie beabsichtigt war. Deshalb habe ich die Antwort von lain erhöht ... Der Fragentitel sollte so umbenannt werden, dass er mit der Frage selbst synchron ist.
Mihai Danila
1
Wahrscheinlich könnte der Titel des Artikels im Link angegeben worden sein, da der Link nicht mehr gültig ist .....
Rupsingh Mathwale
16

Das aktuelle Verzeichnis befindet sich in% CD%

user9517 unterstützt GoFundMonica
quelle
4
% CD% behalte den Pfad bei, auf dem du den Batch ausführst, nicht dort, wo die Batch-Datei existiert
Mohammad AL-Rawabdeh
4
@ Mohammad: In der Tat ist es das aktuelle Verzeichnis. Das andere ist das Verzeichnis, in dem sich die Batch-Datei befindet. Diese beiden sind nicht dasselbe und Ihre Frage fragt ausdrücklich nach diesem. Bearbeiten Sie es also bitte, wenn das nicht das ist, was Sie meinen.
Joey
% CD% gibt den aktuellen Pfad der Batchdatei zurück, schlägt jedoch fehl, wenn wir als Administrator eine Batchdatei ausführen. Wenn wir die Batchdatei als Administrator ausführen, gibt sie den Pfad von System32 zurück. Daher ist es besser,% ~ dp0 für den vollständigen Pfad zu verwenden
% ~ dp0 gibt das Verzeichnis der ausführenden Batchdatei an. Befindet sich die Batch-Datei in einem anderen Verzeichnis, erhalten Sie dieses andere Verzeichnis. % CD% gibt Ihnen immer das aktuelle Verzeichnis.
Mihai Danila
Zum Nachschlagen des Lesers - die Frage verwendete ursprünglich den Begriff "aktuelles Verzeichnis" und bedeutete gleichzeitig das Verzeichnis, in dem sich das Skript befindet - ist jetzt behoben.
Chiccodoro
4

Einige Ausdrücke, die sich auf den Dateinamen auswirken:

~f0gibt den vollqualifizierten Dateinamen an.
~dpnx0wird das Gleiche wie geben ~f0, aber dies zeigt Ihnen, dass Sie es in Teile zerlegen können: d = Laufwerk p = Pfad n = Name x = Erweiterung

Mechaflash
quelle
0

Verwenden Sie den Befehl chdir

Option 1:

chdir 

Option 2:

echo %CD%
sensoft
quelle
Gleiches gilt hier: Dies war nicht die Absicht des OP - die Frage ist jetzt klarer.
Chiccodoro