2013-06-12 18 views
189

Zuerst sah ich this topic, aber ich konnte das nicht verstehen.Holen Sie sich das aktuelle Batchfile-Verzeichnis

Frage:

Es gibt eine Batch-Datei in D:\path\to\file.bat mit folgendem Inhalt:

echo %cd% 
pause 

Ausgang ist:

C:\ 

Es muss D:\path\to

Was mache ich falsch?

+5

Sie sollten alle Antworten auf eine Frage lesen, vor allem die höheren Stimmen Getters, nicht nur die akzeptierte. Die Antwort mit der höchsten Punktzahl an Ihrem geposteten Link beantwortet Ihre Frage bereits. – dbenham

+4

Wenn Sie in c: \ sind, wenn Sie den Namen der Stapeldatei eingeben, dann wird c: \ das% cd% wird gedruckt. – foxidrive

Antwort

373

Die schreibgeschützte Systemvariable %CD% behält den Pfad des Aufrufers des Stapels bei, nicht den Speicherort der Stapeldatei.

Sie können den Namen des Stapel-Skripts selbst erhalten, wie es vom Benutzer mit %0 eingegeben wurde (z. B. scripts\mybatch.bat). Parameter extensions kann auf diese Anwendung angewendet werden, so dass %~dp0 das Laufwerk und den Pfad zum Stapelscript (z. B. W:\scripts\) zurückgibt und %~f0 den vollständigen Pfadnamen zurückgibt (z. B. W:\scripts\mybatch.cmd).

Sie auf andere Dateien im selben Ordner wie die Batch-Skript, indem Sie diese Syntax verweisen:

CALL %0\..\SecondBatch.cmd 

Dies kann auch verwendet werden, in einem Unterprogramm, wird Echo %0 den Anruf Etikett geben, aber wird echo "%~nx0" geben Sie den Dateinamen des Batch-Skripts.

Wenn die Variable %0 erweitert wird, wird das Ergebnis in Anführungszeichen eingeschlossen.

More on batch parameters.

+1

Schau, ich muss 'stm.sql' nicht in' D: \ Dir1 \ Dir2 \ stm.sql' ausführen. Ich brauche mysql.exe -u root -p mysql <% cd% \ stm.sql>, um diese stm.sql-Befehle auszuführen. –

+0

@ HamedKamrava ist es für meine SQL-Batch? nicht Batch-Datei wie '*.Fledermaus oder '* .sh'? – Stoleg

+0

@ Stoleg-In der Tat gibt es 2 Dateien in 'D: \ Dir1 \ Dir2 \ Batchfile.bat' und' D: \ Dir1 \ Dir2 \ stm.sql'. Der Inhalt von batchfile.bat ist: mysql.exe -u root -p mysql Der Inhalt von und stm.sql enthält einige MySQL-Befehle. –

77

Ganz einfach:

setlocal 
cd /d %~dp0 
File.exe 
+5

Der Code ist kurz, aber es ist nicht einfach zu verstehen. Was ist das File.exe? Ist der aktuelle Verzeichnispfad in% ~ dp0 gespeichert? –

+1

@IvailoBardarov Hier ist die Antwort: https://Stackoverflow.com/a/18310141/5259296 –

+0

Diese Antwort beantwortet tatsächlich die Frage, denke ich. Kudos. – macetw

14

Innerhalb Ihrer .bat Datei:

set mypath=%cd% 

Sie können nun die Variable %mypath% den Dateipfad zum .bat Datei verweisen. Um den Pfad zu überprüfen ist richtig:

@echo %mypath% 

Zum Beispiel wird eine Datei mit dem Namen DIR.bat mit folgendem Inhalt

set mypath=%cd% 
@echo %mypath% 
Pause 

Lauf aus dem Verzeichnis g:\test\bat wird, dass der Pfad in dem DOS-Eingabefenster Echo.

+0

das ist feinste und einfachste Lösung – Nani

Verwandte Themen