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
Freigeben: 2025-01-09 21:49:45
Original
370 Leute haben es durchsucht

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:
@echo off
    setlocal enableextensions disabledelayedexpansion

    call :getCurrentBatch batch
    echo %batch%

    exit /b

:getCurrentBatch variableName
    set "%~1=%~f0"
    goto :eof
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage