Was ist das aktuelle Verzeichnis in einer Batchdatei?

510

Ich möchte einige Batch-Dateien erstellen, um ein Programm zu automatisieren.

Meine Frage ist, wenn ich die Batch-Datei erstelle, wie lautet das aktuelle Verzeichnis? Ist es das Verzeichnis, in dem sich die Datei befindet, oder ist es dasselbe Verzeichnis, das in der Eingabeaufforderung angezeigt wird, oder etwas anderes?

Aaron de Windt
quelle

Antworten:

1025

Aus Ihrer Batch-Datei heraus:

  • %cd%bezieht sich auf das aktuelle Arbeitsverzeichnis (Variable)
  • %~dp0 bezieht sich auf den vollständigen Pfad zum Verzeichnis der Batchdatei (statisch)
  • %~dpnx0und %~f0beide beziehen sich auf den vollständigen Pfad zum Stapelverzeichnis und den Dateinamen (statisch).

Siehe auch: Was bedeutet% ~ dp0 und wie funktioniert es?

JRL
quelle
5
@ Јοеу - %0könnte den Namen des aktuellen Unterprogramm geben, aber %~dp0wird immer den vollständigen Pfad zum Ausführen von Batch - Datei geben.
Dbenham
77
Tatsächlich sieht es so aus, als ob% ~ dp0 den vollständigen Pfad zu dem Verzeichnis angibt, in dem sich die ausführende Batchdatei befindet.% ~ Dpnx0 (entspricht% ~ f0) gibt den vollständigen Pfad zur Batchdatei an. Weitere Informationen finden Sie unter robvanderwoude.com/parameters.php .
tödlicher Hund
6
Siehe auch gute detaillierte Antworten auf eine ähnliche Frage: Liste der übergebenen Argumente im Windows-Batch-Skript (.bat)
abrufen
1
Leider, wenn als Prozess von .net% ~ dp0 ausgeführt wird, ist das Arbeitsverzeichnis nicht das Batch-Dateiverzeichnis. Dies wurde auf die harte Tour herausgefunden.
Trampster
3
Als ein explizites Beispiel, wenn sie auf einem Rechtsklick auf .cmdDatei und als Administrator ausgeführt wird , %cd%gibt C:\WINDOWS\system32und %~dp0gibt das Batch - Datei - Verzeichnis mit Slash am Ende.
icc97
25

Es in der Regel ist das Verzeichnis , aus dem die Batch - Datei gestartet wird , aber wenn Sie die Batch - Datei über eine Verknüpfung starten, ein anderes Startverzeichnis angegeben werden. Auch wenn you'r in cmd ein , und Ihr aktuelles Verzeichnis ist c:\dir3, können Sie die Batch - Datei starten , c:\dir1\dir2\batch.batin dem Fall wird das aktuelle Verzeichnis sein c:\dir3.

GolezTrol
quelle
11

In einer Batchdatei ist% cd% der am häufigsten verwendete Befehl für das aktuelle Verzeichnis, obwohl Sie Ihre eigene Variable festlegen können:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Angenommen, Sie wollten Myprog.exe öffnen. Wenn es sich im selben Ordner befindet, würden Sie den folgenden Befehl verwenden:

start %mypath%\Myprog.exe

Das würde Myprog aus dem aktuellen Ordner öffnen.

Die andere Option besteht darin, ein Verzeichnis in C: AutomatePrograms zu erstellen. Anschließend übertragen Sie Ihre Dateien in diesen Ordner und können sie mit dem folgenden Befehl öffnen:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
J. Bond
quelle
1
Wie in der oberen Antwort hier angegeben, %cd%ist dies variabel. Wenn Sie also die Batchdatei im Windows Explorer als Administrator ausführen, erhalten Sie C:\WINDOWS\system32mit ziemlicher Sicherheit nicht das, was Sie möchten. %~dp0ist konsequenter.
icc97
6

Angenommen, Sie haben eine Datei in Ihrem aktuellen Verzeichnis geöffnet. Der Befehl wäre:

 start %cd%\filename.filetype

Ich hoffe ich habe deine Frage beantwortet.

Mehrmals pingen
quelle
5

In diesem Verzeichnis führen Sie den Befehl zum Ausführen Ihrer Batchdatei aus.

Wie in den obigen Antworten erwähnt, können Sie Ihrem Skript den folgenden Befehl hinzufügen, um Folgendes zu überprüfen:

> set current_dir=%cd%
> echo %current_dir%  
anuj0901
quelle
4

Dies ist das Verzeichnis, in dem Sie die Batchdatei starten. Wenn sich Ihr Stapel beispielsweise in befindet c:\dir1\dir2und Sie dies tun cd c:\dir3, führen Sie den Stapel aus. Das aktuelle Verzeichnis wird angezeigt c:\dir3.

icyrock.com
quelle
0

Nur meine 2 Cent. Der folgende Befehl schlägt fehl, wenn er aus einer auf pendrive abgelegten Batchdatei (Windows 7) aufgerufen wird:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Aber das macht den Job:

xcopy /s /e /i %~dp0Ala C:\KS\Ala
Darek Adamkiewicz
quelle
Dies ist der Schalter, nach dem ich gesucht habe, um den übergeordneten Verzeichnispfad meiner bat-Datei ohne diesen Batch-Dateinamen zu bestimmen:%~dp0
Ammar Mohammad