Heim >Backend-Entwicklung >C++ >Warum ändert „%~dp0' Verzeichnispfade, wenn es von C# aus aufgerufen wird?
Pfadänderungen mit %~dp0
in aus C# aufgerufenen Batchdateien verstehen
Ausführen einer Batchdatei mit:
<code class="language-batch">echo %~dp0 CD Arvind echo %~dp0</code>
aus einem C#-Programm kann zu einem geänderten Pfad führen, der durch %~dp0
nach dem Befehl CD
angezeigt wird. Dieses Verhalten steht im Widerspruch zur direkten Ausführung der Batchdatei.
Die Grundursache:
Das Verhalten ist darauf zurückzuführen, wie cmd.exe die Variable %~0
verarbeitet. Beim Start aus C# kann das in Anführungszeichen gesetzte Argument ("%~0"
) intern ohne Anführungszeichen stehen, was zu einem relativen Pfadverweis für die Batchdatei anstelle des absoluten Pfads führt.
Lösen des Pfadproblems
Hier sind Lösungen, um eine konsistente Pfadabfrage sicherzustellen:
Von C#:
Anführungszeichen weglassen: Batchdatei ohne Anführungszeichen aufrufen: cmd /c batchfile.cmd
Vollständigen Pfad angeben: Wenn Anführungszeichen erforderlich sind, geben Sie im C#-Befehl den vollständigen Pfad zur Batchdatei an.
Aus der Batchdatei:
Verwenden Sie eine Unterroutine, um den Pfad der Batchdatei zuverlässig zu bestimmen:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batchPath echo %batchPath% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Diese Unterroutine verwendet %~f0
, um den vollständig qualifizierten Pfad der Batchdatei abzurufen und ihn in der angegebenen Variablen zu speichern. Diese Methode vermeidet Inkonsistenzen, die sich aus dem Verhalten der Variablen %~dp0
beim Aufruf aus externen Anwendungen ergeben.
Das obige ist der detaillierte Inhalt vonWarum ändert „%~dp0' Verzeichnispfade, wenn es von C# aus aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!