Maison >développement back-end >C++ >Pourquoi `%~dp0` change-t-il les chemins de répertoire lorsqu'il est appelé depuis C# ?
Comprendre les changements de chemin avec %~dp0
dans les fichiers batch appelés depuis C#
Exécution d'un fichier batch contenant :
<code class="language-batch">echo %~dp0 CD Arvind echo %~dp0</code>
à partir d'un programme C# peut entraîner un chemin modifié affiché par %~dp0
après la commande CD
. Ce comportement est incompatible avec l'exécution directe du fichier batch.
La cause profonde :
Le comportement est dû à la façon dont cmd.exe gère la variable %~0
. Lorsqu'il est lancé à partir de C#, l'argument cité ("%~0"
) peut être sans guillemets en interne, conduisant à une référence de chemin relatif pour le fichier batch au lieu du chemin absolu.
Résoudre le problème du chemin
Voici des solutions pour garantir une récupération cohérente du chemin :
Depuis C# :
Omettre les guillemets : Invoquer le fichier batch sans les guillemets : cmd /c batchfile.cmd
Fournir le chemin complet : Si des guillemets sont requis, spécifiez le chemin complet du fichier batch dans la commande C#.
À partir du fichier batch :
Employer un sous-programme pour déterminer de manière fiable le chemin du fichier batch :
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batchPath echo %batchPath% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Ce sous-programme utilise %~f0
pour obtenir le chemin complet du fichier batch, en le stockant dans la variable spécifiée. Cette méthode évite les incohérences résultant du comportement de la %~dp0
variable lorsqu'elle est appelée depuis des applications externes.
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!