Heim >Backend-Entwicklung >C++ >Warum liefert %~dp0 unterschiedliche Ergebnisse, wenn eine Batchdatei direkt oder über C# ausgeführt wird?
%~dp0 Pfadreferenzunterschied in der Batchdatei
Hintergrund:
In der Batchdatei stellt %~dp0 den Verzeichnispfad des aktuellen Speicherorts der Batchdatei dar. Beim Ändern des aktuellen Verzeichnisses (CD) wird im Allgemeinen erwartet, dass der Wert von %~dp0 aktualisiert wird, um das neue Verzeichnis widerzuspiegeln.
Frage:
Benutzer haben jedoch Unterschiede im Verhalten von %~dp0 beim Ausführen einer Batchdatei über ein C#-Programm beobachtet. %~dp0 behält seinen ursprünglichen Wert bei, wenn es direkt ausgeführt wird, ändert sich jedoch, wenn es aus C# aufgerufen wird.
Analyse:
Dieser Unterschied ist auf die Art und Weise zurückzuführen, wie %~0 (der unveränderte Batchdateiname) gehandhabt wird, wenn die Batchdatei in Anführungszeichen aufgerufen wird.
Lösung:
Um dieses Problem zu lösen, werden zwei Methoden empfohlen:
Aus C#-Code:
ProcessStartInfo.FileName = "mybatfile.bat";
Aus Batchdatei:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Das obige ist der detaillierte Inhalt vonWarum liefert %~dp0 unterschiedliche Ergebnisse, wenn eine Batchdatei direkt oder über C# ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!