Heim > Backend-Entwicklung > C++ > Warum ändert %~dp0 das Verzeichnis in Batchdateien, wenn es von C# aufgerufen wird?

Warum ändert %~dp0 das Verzeichnis in Batchdateien, wenn es von C# aufgerufen wird?

Mary-Kate Olsen
Freigeben: 2025-01-09 22:04:10
Original
586 Leute haben es durchsucht

Why Does %~dp0 Change Directory in Batch Files When Called from C#?

Analyse der Verhaltensunterschiede der Variablen %~dp0, wenn C# eine Batchdatei aufruft

Beim direkten Ausführen der Batchdatei stellt die Variable %~dp0 den vollständigen Pfad der Batchdatei dar. Wenn Sie jedoch die Batchdatei aus einem C#-Programm mit Anführungszeichen aufrufen, ändert sich der Wert von %~dp0 nach einem Verzeichniswechsel.

Ursachenanalyse

Dieses Problem ergibt sich aus der Art und Weise, wie cmd.exe mit zitierten %~0-Parametern umgeht. Wenn eine Batch-Datei mit Anführungszeichen gestartet wird, werden die Anführungszeichen entfernt und der Batch-Aufruf erfolgt relativ zum aktuellen Verzeichnis. Wenn daher das Verzeichnis innerhalb der Batchdatei geändert wird, folgt %~dp0 der relativen Pfadänderung, was zu unterschiedlichen Werten führt.

Lösung

C#-Lösung:

  • Vermeiden Sie die Verwendung von Anführungszeichen beim Starten einer Batchdatei: cmd /c batchfile.cmd
  • Wenn Anführungszeichen verwendet werden müssen, geben Sie im Aufruf den vollständigen Pfad zur Batchdatei an.

Batch-dateiseitige Lösung:

Erstellen Sie eine Unterroutine, um zuverlässig den Pfad zu einer Batchdatei zu erhalten:

<code class="language-batch">@echo off
setlocal enableextensions disabledelayedexpansion

call :getCurrentBatch batch
echo %batch%

exit /b

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

Diese Unterroutine stellt sicher, dass unabhängig vom Aufruf der vollständige Pfad zur Batchdatei erhalten wird.

Das obige ist der detaillierte Inhalt vonWarum ändert %~dp0 das Verzeichnis in Batchdateien, wenn es von C# aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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