Analyse des différences de comportement de la variable %~dp0 lorsque C# appelle un fichier batch
Lors de l'exécution directe du fichier batch, la variable %~dp0 représente le chemin complet du fichier batch. Cependant, lors de l'appel du fichier batch à partir d'un programme C# à l'aide de guillemets, la valeur de %~dp0 change après un changement de répertoire.
Analyse des causes
Ce problème provient de la façon dont cmd.exe gère les paramètres %~0 cités. Lorsqu'un fichier batch est démarré avec des guillemets, les guillemets sont supprimés et l'appel batch est effectué par rapport au répertoire actuel. Par conséquent, lorsque le répertoire est modifié dans le fichier batch, %~dp0 suivra le changement de chemin relatif, entraînant des valeurs différentes.
Solution
Solution C# :
cmd /c batchfile.cmd
Solution côté fichier batch :
Créez un sous-programme pour obtenir de manière fiable le chemin d'accès à un fichier batch :
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Ce sous-programme garantit que, quelle que soit la manière dont il est appelé, le chemin complet du fichier batch est obtenu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!