Maison > développement back-end > C++ > Pourquoi %~dp0 change-t-il de répertoire dans les fichiers batch lorsqu'il est appelé depuis C# ?

Pourquoi %~dp0 change-t-il de répertoire dans les fichiers batch lorsqu'il est appelé depuis C# ?

Mary-Kate Olsen
Libérer: 2025-01-09 22:04:10
original
586 Les gens l'ont consulté

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

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# :

  • Évitez d'utiliser des guillemets lors du démarrage d'un fichier batch : cmd /c batchfile.cmd
  • Si des guillemets doivent être utilisés, incluez le chemin complet du fichier batch dans l'appel.

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal