Lot imbriqué pour les boucles
Suivantes imbriqués pour boucle lecteurs me rend fou (sur Windows 7):
@echo off
SetLocal EnableDelayedExpansion
set TESTDIRS=fast mid slow
set TD=src\test\resources\testsuite
for %%d in (%TESTDIRS%) do (
set CTD=%TD%\%%d
echo CTD: !CTD!
REM Echos the expected path
echo CTD: %CTD%
REM Echos nothing -- understandable
for /R !CTD! %%f in (*.fs) do (echo %%f)
REM Echos nothing -- why?
for /R src\test\resources\testsuite\fast %%f in (*.fs) do (echo %%f)
REM Echos expected files
)
J'ai essayé différentes solutions impliquant la désactivation de DelayedExpansion, appelez-les déclarations et autres joyeusetés, mais je n'ai jamais eu la boucle interne de travail. Je sais que je pourrais remplacer la boucle interne par un appel de sous-routine, mais il doit bien y avoir un moyen de le faire fonctionner avec des boucles imbriquées.
source d'informationauteur Malte Schwerhoff
Vous devez vous connecter pour publier un commentaire.
Que si vous avez utilisé
pushd !CTD!
etpopd
et laissezFOR /R
utilise par défaut le répertoire courant?Juste pour donner un exemple d'une boucle imbriquée qui fonctionne:
La sortie (au moins sur Windows 7) est
Cette charge de jeb de l'observation que l'expansion des variables dans les boucles des travaux s'ils se produisent à l'intérieur des parenthèses (même sans expansion retardée).
Parce que personne ne l'a mentionné, voici la solution à l'aide de lot de sous-routines et les
CALL
commande.Je sais GOTO n'est pas très populaire, mais les fichiers de commandes ont été initialement conçus pour utiliser des étiquettes pour le contrôle de flux. Le parenthetized structure de contrôle de la syntaxe a été ajouté plus tard, et cette question est un exemple de cas où il se casse. Le problème se prête bien à des lots de sous-routines.
Il n'est pas évident! C'est le spécial de l'analyse de POUR!
Un POUR commande est analysée directement après l'évasion/caractère spécial de phase (pour la détection de la parenthèse), mais comme un résultat que vous ne pouvez pas l'aide de retard ou d' %%var expansion en tant que paramètres.
Et aussi cela ne peut pas fonctionner:
ne permet pas de définir unb et c comme delims, mais !chun et r à la place.
EDIT: Dans les parenthèses de l'expansion retardée ne fonctionne pas comme attendu:
Je m'attends à ce que vous avez à utiliser une fonction pour résoudre votre problème.