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.
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
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
Sie können auch tun
Pushd "%~dp0"
Was auch das Laufen von einem unbekannten Pfad in Betracht zieht.
Versuchen Sie es in Ihrem Batch
set "batchisin=%~dp0"
hierdurch sollte die Variable auf den Speicherort Ihres Stapels gesetzt werden.