Heim >Backend-Entwicklung >C++ >Warum liefert %~dp0 unterschiedliche Ergebnisse, wenn eine Batchdatei direkt oder über C# ausgeführt wird?

Warum liefert %~dp0 unterschiedliche Ergebnisse, wenn eine Batchdatei direkt oder über C# ausgeführt wird?

Barbara Streisand
Barbara StreisandOriginal
2025-01-09 21:49:45334Durchsuche

Why Does %~dp0 Yield Different Results When a Batch File is Executed Directly vs. via C#?

%~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.

  • Direkte Ausführung: Wenn %~0 in Anführungszeichen gesetzt wird, werden die Anführungszeichen entfernt und der vollständige Batchdateipfad wird zur Bestimmung von %~dp0 verwendet.
  • C#-Ausführung: Wenn %~0 in C# in Anführungszeichen gesetzt ist, wird die nicht in Anführungszeichen gesetzte Zeichenfolge zum Suchen der Batchdatei verwendet. Dies kann zu relativen Pfaden führen, was zu ungenauen %~dp0-Werten führt.

Lösung:

Um dieses Problem zu lösen, werden zwei Methoden empfohlen:

Aus C#-Code:

  • Vermeiden Sie die Verwendung von Anführungszeichen beim Aufrufen von Batchdateien: ProcessStartInfo.FileName = "mybatfile.bat";
  • Wenn Anführungszeichen erforderlich sind, geben Sie bitte den vollständigen Pfad der Batchdatei an, um sicherzustellen, dass %~dp0 korrekt bleibt.

Aus Batchdatei:

  • Verwenden Sie eine Unterroutine, um unabhängig von der Ausführungsmethode zuverlässig den aktuellen Batchdateipfad abzurufen:
<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!

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