Heim >Backend-Entwicklung >C++ >Warum ändert „%~dp0' Verzeichnispfade, wenn es von C# aus aufgerufen wird?

Warum ändert „%~dp0' Verzeichnispfade, wenn es von C# aus aufgerufen wird?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-09 21:47:42657Durchsuche

Why Does `%~dp0` Change Directory Paths When Called from C#?

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#:

  1. Anführungszeichen weglassen: Batchdatei ohne Anführungszeichen aufrufen: cmd /c batchfile.cmd

  2. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn