Je souhaite parcourir tous les fichiers .h du répertoire en cours et appeler une fonction de traitement par lots pour le fichier .cpp correspondant. En fait, je l'avais déjà fonctionné, mais quand j'ai essayé d'utiliser des variables locales, j'ai une sortie étrange.Comment obtenir le nom de fichier dans la variable à l'intérieur de la boucle?
SETLOCAL
for /R %%f in (*.h) do (
SET header=%f%
ECHO header=%header%
SET source=%%~df%%~pf%%~nf.cpp
ECHO source=%source%
)
Je reçois cette sortie:
SETLOCAL
C:\WorkingDirectory>(
SET header=
ECHO header=
SET source=C:\WorkingDirectory\SomeFile.cpp
ECHO source=
)
header=
source=
Pourquoi %%~df%%~pf%%~nf.cpp
correctement étendu, mais rien ECHO %source%
imprime? Comment puis-je correctement SET header=%f%
?
vous avez besoin [expansion retardée] (http://ss64.com/nt/delayedexpansion.html) – npocmaka
''% f% devrait effectivement lire '%% f', ou mieux encore,' %% ~ f' pour supprimer les cotes environnantes potentielles ... pour lire 'header' vous devez utiliser'! header! 'au lieu de'% header% '; Pour que cette expansion retardée fonctionne, ajoutez l'argument 'EnableDelayedExpansion' à la commande' setlocal' ... – aschipfl