Emboîter commande "FOR" Batch

parats -  
 parats -
Bonjour,
J'aimerais emboiter plusieur commande FOR mais cela ne marche pas :

for /r "F:\" %%d in (*.jpg) do (
set tp=%%~td
for /f "tokens=1-3 delims=/: " %%a in ("%tp%") do (
set datef=%%a%%b%%c
set jf=%%a
set mf=%%b
set af=%%c)
echo jour : %jf% mois : %mf% a : %af% date du fichier: %datef%
)

Le problème pour la seconde commande FOR c'est qu'elle ne s'exécute pas (je n'est pas de nombre pour "datef ; mf ; af")
Pouvez vous m'aidez, Merci.

2 réponses

  1. java4ever
     
    Bonjour et EUREKA!

    Mon premier post était un peu hâtif, en effet, en lançant plusieurs fois le batch, il se met à marcher.
    En fait la solution est d'utiliser le delay d'expension de variable comme ci-dessous (mettre l'option avec setlocal et quand on veut utiliser une variable en lecture, l'appeler en l'entourant du signe ! au lieu de %
    Tu peux avoir l'explication en faisant sous cmd : "SET /?"
    @echo off
    setlocal enableDelayedExpansion
    for /r "D:\Photos\2010" %%d in (*.jpg) do (
      set tp=%%~td
      echo " valeur tp " !tp!
      for /f "tokens=1-3 delims=/: " %%a in ("!tp!") do (
          set datef=%%a%%b%%c
          set jf=%%a
          set mf=%%b
          set af=%%c)
    echo jour : !jf! mois : !mf! a : !af! date du fichier: !datef!
    ) 
    

    Attention, moi j'ai mis e répertoire D:\Photo alors que le tien était F:\
    Cordialement et désolé d'avoir donné un indication erronée a départ.
    3
    1. parats
       
      Merci
      0
  2. java4ever
     
    Bonjour,

    C'est juste une histoire de "scope"
    Ta 2ieme boucle marche, mais les variables jf, mf, af et datef sont locales à cette 2ieme boucle.
    Il suffi de les initialiser dans la première pour que ça marche :
    for /r "D:\Photos\2010\2010-11-15" %%d in (*.jpg) do (
      set tp=%%~td
      echo " valeur tp " %tp%
    Rem initialiser des variables dans ce scope
          set datef=""
          set jf=""
          set mf=""
          set af=""
      for /f "tokens=1-3 delims=/: " %%a in ("%tp%") do (
          set datef=%%a%%b%%c
          set jf=%%a
          set mf=%%b
          set af=%%c)
    echo jour : %jf% mois : %mf% a : %af% date du fichier: %datef%
    ) 
    2
    1. parats
       
      Bonjour
      Il y a un pb car a "echo " ça ne m'affiche pas la date et pourtant si je j'entre la comande "SET" a la fin je voit marquer la variable avec les bon nombre pourquoi ? Et cela marche pas non plus, pourquoi ?

      set datep=15112010
      for /r "D:\Photos\2010\2010-11-15" %%d in (*.jpg) do (
      set cp=%%t
      set tp=%%~td
      echo " valeur tp " %tp%
      set datef=""
      set jf=""
      set mf=""
      set af=""
      for /f "tokens=1-3 delims=/: " %%a in ("%tp%") do (
      set datef=%%a%%b%%c
      set jf=%%a
      set mf=%%b
      set af=%%c)
      echo jour : %jf% mois : %mf% a : %af% date du fichier: %datef%
      if %datep%==%datef% xcopy "%cp%" "C:\photo\"
      )

      (mon but est de copier des fichier juste d'un jour)
      Si vous avez une autre solution je la prendrais volontiers.

      Merci pour vos réponses
      0