Analyse der Verhaltensunterschiede der Variablen %~dp0, wenn C# eine Batchdatei aufruft
Beim direkten Ausführen der Batchdatei stellt die Variable %~dp0 den vollständigen Pfad der Batchdatei dar. Wenn Sie jedoch die Batchdatei aus einem C#-Programm mit Anführungszeichen aufrufen, ändert sich der Wert von %~dp0 nach einem Verzeichniswechsel.
Ursachenanalyse
Dieses Problem ergibt sich aus der Art und Weise, wie cmd.exe mit zitierten %~0-Parametern umgeht. Wenn eine Batch-Datei mit Anführungszeichen gestartet wird, werden die Anführungszeichen entfernt und der Batch-Aufruf erfolgt relativ zum aktuellen Verzeichnis. Wenn daher das Verzeichnis innerhalb der Batchdatei geändert wird, folgt %~dp0 der relativen Pfadänderung, was zu unterschiedlichen Werten führt.
Lösung
C#-Lösung:
cmd /c batchfile.cmd
Batch-dateiseitige Lösung:
Erstellen Sie eine Unterroutine, um zuverlässig den Pfad zu einer Batchdatei zu erhalten:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Diese Unterroutine stellt sicher, dass unabhängig vom Aufruf der vollständige Pfad zur Batchdatei erhalten wird.
Das obige ist der detaillierte Inhalt vonWarum ändert %~dp0 das Verzeichnis in Batchdateien, wenn es von C# aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!