Maison > développement back-end > C++ > Pourquoi %~dp0 donne-t-il des résultats différents lorsqu'un fichier batch est exécuté directement ou via C# ?

Pourquoi %~dp0 donne-t-il des résultats différents lorsqu'un fichier batch est exécuté directement ou via C# ?

Barbara Streisand
Libérer: 2025-01-09 21:49:45
original
378 Les gens l'ont consulté

Why Does %~dp0 Yield Different Results When a Batch File is Executed Directly vs. via C#?

%~dp0 différence de référence de chemin dans le fichier batch

Contexte :

Dans le fichier batch, %~dp0 représente le chemin du répertoire de l'emplacement actuel du fichier batch. Lors du changement du répertoire actuel (CD), il est généralement prévu que la valeur de %~dp0 soit mise à jour pour refléter le nouveau répertoire.

Question :

Cependant, les utilisateurs ont observé des différences dans le comportement de %~dp0 lors de l'exécution d'un fichier batch via un programme C#. %~dp0 conserve sa valeur d'origine lorsqu'il est exécuté directement, mais change lorsqu'il est appelé depuis C#.

Analyse :

Cette différence est due à la façon dont %~0 (le nom du fichier batch non modifié) est géré lorsque le fichier batch est appelé avec des guillemets.

  • Exécution directe : Lorsque %~0 est cité, les guillemets sont supprimés et le chemin complet du fichier batch est utilisé pour déterminer %~dp0.
  • Exécution C# : Lorsque %~0 est cité en C#, la chaîne sans guillemets sera utilisée pour localiser le fichier batch. Cela peut entraîner des chemins relatifs, entraînant des valeurs %~dp0 inexactes.

Solution :

Afin de résoudre ce problème, deux méthodes sont recommandées :

À partir du code C# :

  • Évitez d'utiliser des guillemets lors de l'appel de fichiers batch : ProcessStartInfo.FileName = "mybatfile.bat";
  • Si des guillemets sont requis, veuillez spécifier le chemin complet du fichier batch pour garantir que %~dp0 reste exact.

À partir du fichier batch :

  • Utilisez un sous-programme pour récupérer de manière fiable le chemin du fichier batch actuel, quelle que soit la méthode d'exécution :
@echo off
    setlocal enableextensions disabledelayedexpansion

    call :getCurrentBatch batch
    echo %batch%

    exit /b

:getCurrentBatch variableName
    set "%~1=%~f0"
    goto :eof
Copier après la connexion

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!

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