2017-01-19 3 views
0

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%?

+2

vous avez besoin [expansion retardée] (http://ss64.com/nt/delayedexpansion.html) – npocmaka

+1

''% 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

Répondre

1

1) La variable que vous accédez est pas accessible avec %f% mais %%f

2) Comme @npocmaka a déjà été mentionné comme un commentaire DelayedExpansion est nécessaire que dans le lot chaque bloc de fermeture de parenthèses est analysée à la fois lors de l'utilisation du % d'habitude. Pour vous débarrasser de ce problème, ajoutez setlocal EnableDelayedExpansion à votre script après @echo off et remplacez %header% par !header!. La même chose vaut pour %source%, mais pas pour la variable de boucle %%f!

SETLOCAL EnableDelayedExpansion 

for %%f in (*.h) do (
    SET header=%%~ff 
    ECHO header=!header! 
    SET source=%%~df%%~pf%%~nf.cpp 
    ECHO source=!source! 
) 
+0

Je me suis permis d'ajouter l'exemple de travail. J'utilise '%% ~ ff' pour obtenir le chemin complet – user463035818

+0

C'est bien. Heureux d'avoir pu aider! – geisterfurz007