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

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

Patricia Arquette
Libérer: 2025-01-09 21:47:42
original
612 Les gens l'ont consulté

Why Does `%~dp0` Change Directory Paths When Called from 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>
Copier après la connexion

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

  1. Omettre les guillemets : Invoquer le fichier batch sans les guillemets : cmd /c batchfile.cmd

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

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!

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