Frage Ruft das Verzeichnis ab, das das aktuell ausgeführte Stapelscript enthält


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

c:\folder1\folder2\batch.bat

Ich möchte nur 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 es tun?


28
2018-04-04 07:17


Ursprung


Wenn Sie% 0 in einer Batchdatei als Teil einer Befehlszeile verwenden, sollten Sie% 0 \ .. \ RestOfStuff verwenden. Der Doppelpunkt nimmt den Dateinamen zurück. - John Gardeniers
Das Verzeichnis, das das aktuell ausgeführte Skript enthält, stimmt nicht unbedingt mit dem aktuellen Arbeitsverzeichnis (CD) überein! Ich habe die Frage entsprechend bearbeitet - sie vermeidet jetzt den Begriff "aktuelles Verzeichnis". - chiccodoro


Antworten:


%~p0

Gibt nur den Pfad zurück.

%~dp0

Gibt den Laufwerkspfad zurück.

Weitere Informationen zum Thema finden Sie auf Microsofts Website


48
2018-04-04 07:30



Als eine weitere Referenzquelle wird die gleiche Liste von Variablensubstitutionen auch angezeigt, wenn Sie eingeben for /? - Kevin
% ~ dp0 gibt das Verzeichnis der ausführenden Batch-Datei an. Wenn sich die Stapeldatei in einem anderen Verzeichnis befindet, erhalten Sie dieses andere Verzeichnis. % CD% gibt Ihnen immer das aktuelle Verzeichnis. - Mihai Danila
@MihaiDanila, nein, das ist nicht das, was OP gefragt hat. - Bart De Vos
Tatsächlich bin ich auf diese Frage gekommen, als ich nach einem Weg gesucht habe, um das zu bekommen aktuell Verzeichnis. Dies war der erste Treffer bei Google. Der Titel sagt offensichtlich aktuell Verzeichnis, obwohl Sie mit dem Inhalt recht haben. Wir haben beide Recht, aber ich denke, dass es richtig ist und ich habe mehr Recht damit, was die Frage tatsächlich vermittelt, trotz dessen, was damit gemeint war. Deshalb habe ich die Antwort von Lain aufgestockt ... Der Titel der Frage sollte umbenannt werden, damit er mit der Frage selbst übereinstimmt. - Mihai Danila
@Mihai, ich habe die Frage entsprechend bearbeitet und den Begriff "aktuelles Verzeichnis" komplett vermieden. - chiccodoro


Das aktuelle Verzeichnis wird in% CD% gehalten


16
2018-05-23 20:49



% CD% rettet den Pfad, aus dem Sie den Stapel ausführen, nicht dort, wo die Stapeldatei vorhanden ist - Mohammad AL-Rawabdeh
@Mohammad: In der Tat ist es das aktuell Verzeichnis. Der andere ist das Verzeichnis, in dem sich die Batch-Datei befindet. Diese beiden sind nicht gleich und deine Frage verlangt ausdrücklich danach. Also bitte bearbeiten Sie es, wenn das nicht das ist, was Sie meinen. - Joey
% CD% gibt den aktuellen Pfad der Stapeldatei zurück, schlägt jedoch fehl, wenn wir die Stapeldatei als Administrator ausführen. Wenn wir die Batchdatei als Administrator ausführen, gibt sie den Pfad von System32 zurück. Daher ist es besser,% ~ dp0 als vollständigen Pfad zu verwenden
% ~ dp0 gibt das Verzeichnis der ausführenden Batch-Datei an. Wenn sich die Stapeldatei in einem anderen Verzeichnis befindet, erhalten Sie dieses andere Verzeichnis. % CD% gibt Ihnen immer das aktuelle Verzeichnis. - Mihai Danila
Für die Referenz des Lesers - die Frage verwendete ursprünglich den Begriff "aktuelles Verzeichnis" und bedeutete das Verzeichnis, das das Skript enthielt - das ist jetzt behoben. - chiccodoro


Einige Ausdrücke, die den Dateinamen beeinflussen:

~f0 gibt den vollständig qualifizierten Dateinamen an.
~dpnx0 wird dasselbe geben wie ~f0, aber das zeigt Ihnen, dass Sie es in Teile zerlegen können: d = Laufwerk p = Pfad n = Name x = Erweiterung


4
2017-10-07 14:13





benutzen Befehl chdir

Option 1:

chdir 

Option 2:

echo %CD%

0



Gleiches hier: Dies war nicht die Absicht des OP - die Frage ist jetzt klarer. - chiccodoro