it-swarm.com.de

Wie finde ich das aktuelle Verzeichnis einer Batch-Datei und verwende es dann für den Pfad?

Ich habe eine Batchdatei, die ich an unsere Kunden verteilen möchte, um eine Softwareaufgabe auszuführen.

Wir verteilen sie als Ordner oder .Zip mit den Dateien im Inneren. Im Inneren befinden sich die Batchdateien und ein weiterer Ordner mit den Dateien, die zum Ausführen des Batchs benötigt werden.

Normalerweise geben Sie beim Erstellen eines Stapels den Pfad ein, in dem sich die Dateien befinden. Aber ich werde nicht wissen, wo die Dateien sind. Die Dateien werden weiterhin im Hauptordner gespeichert, aber ich muss den Ordner im Stapel finden, um die Dateien ausführen zu können.

Also zum Beispiel: Wenn sie den Hauptordner auf dem Desktop haben und ihn ausführen, müsste er ungefähr so ​​aussehen wie "C:\Users\Username\Desktop" zu rennen. Sie würden die Batch-CD an diesem Ort haben.

Aber was ist, wenn sie es aus Dokumenten ausführen? Ich kenne den Benutzernamen nicht, also muss ich den Stapel irgendwie finden lassen. Jeder Code und/oder Anweisungen wäre toll.

67
Ryan Barber

Es ist nicht erforderlich zu wissen, wo sich die Dateien befinden, da beim Starten einer bat-Datei das Arbeitsverzeichnis das Verzeichnis ist, in dem sie gestartet wurde (der "Master-Ordner"). Wenn Sie also die folgende Struktur haben:

.\mydocuments\folder\mybat.bat
.\mydocuments\folder\subfolder\file.txt

Und der Benutzer startet die "mybat.bat", das Arbeitsverzeichnis ist ".\Mydocuments\folder", so dass Sie nur den Namen des Unterordners in Ihr Skript schreiben müssen:

@Echo OFF
REM Do anything with ".\Subfolder\File1.txt"
PUSHD ".\Subfolder"
Type "File1.txt"
Pause&Exit

Auf jeden Fall wird das Arbeitsverzeichnis in der Variablen "% CD%" gespeichert, und das Verzeichnis, in dem die Fledermaus gestartet wurde, wird im Argument 0 gespeichert. Wenn Sie das Arbeitsverzeichnis auf einem beliebigen Computer kennen möchten, können Sie Folgendes tun:

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit
85
ElektroStudios

Die Antwort von ElektroStudios ist etwas irreführend.

"Wenn Sie eine BAT-Datei starten, ist das Arbeitsverzeichnis das Verzeichnis, in dem sie gestartet wurde" Dies ist der Fall, wenn der Benutzer im Explorer auf die Batch-Datei klickt.

Wenn das Skript jedoch mit dem Befehl CALL von einem anderen Skript aus aufgerufen wird, ändert sich das aktuelle Arbeitsverzeichnis nicht.

Daher ist es in Ihrem Skript besser,% ~ dp0subfolder\file1.txt zu verwenden

Beachten Sie auch, dass% ~ dp0 mit einem Backslash endet, wenn sich das aktuelle Skript nicht im aktuellen Arbeitsverzeichnis befindet. Wenn Sie also den Verzeichnisnamen ohne einen abschließenden Backslash benötigen, können Sie so etwas wie verwenden

call :GET_THIS_DIR
echo I am here: %THIS_DIR%
goto :EOF

:GET_THIS_DIR
pushd %~dp0
set THIS_DIR=%CD%
popd
goto :EOF
55
Henning

Sie können auch tun

 Pushd "%~dp0"

Was auch das Laufen von einem unbekannten Pfad in Betracht zieht.

44
Matt Williamson

Versuchen Sie es in Ihrem Batch

set "batchisin=%~dp0"

hierdurch sollte die Variable auf den Speicherort Ihres Stapels gesetzt werden.

6
Magoo