Maison >développement back-end >C++ >Pourquoi le comportement %~dp0 diffère-t-il dans les fichiers batch exécutés directement par rapport à C# ?
Comprendre le comportement incohérent de %~dp0 dans les fichiers batch
Le comportement de %~dp0
(qui récupère le répertoire du fichier batch) montre une curieuse incohérence : il reste stable lorsque le répertoire du fichier batch change sauf que le fichier batch soit lancé depuis un programme C#. Cet article explique la cause profonde et propose des solutions.
La source du problème : comment cmd.exe gère %~0
Le problème principal vient de la façon dont cmd.exe
interprète %~0
, la variable représentant le fichier batch en cours d'exécution. Lorsqu'un fichier batch est exécuté sans guillemets, cmd.exe
utilise une variable interne contenant le chemin complet du fichier batch. Cependant, si le fichier batch est appelé avec guillemets, cmd.exe
supprime les guillemets de la valeur de %~0
, en le traitant simplement comme le nom du fichier. Il essaie ensuite de résoudre le chemin complet de manière relative, conduisant à un comportement incohérent.
Solutions : Correction de la récupération de chemin incohérent
Voici des stratégies pour garantir un comportement %~dp0
cohérent, quelle que soit la manière dont le fichier batch est appelé :
Dans le code C# :
cmd /c batchfile.cmd
). C'est la solution la plus simple.%~0
reçoive les informations de chemin complet.Dans le fichier batch :
Exemple de sous-programme :
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatchFilePath batchPath echo %batchPath% exit /b :getCurrentBatchFilePath variableName set "%~1=%~f0" goto :eof</code>
Ce sous-programme récupère le chemin complet (%~f0
) et le stocke dans la variable spécifiée, fournissant une référence de chemin fiable pour une utilisation ultérieure. Cette méthode est recommandée pour une compatibilité et une robustesse maximales.
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!