Téléchargement
illégal
Posez votre question Signaler

Emboîter commande "FOR" Batch

parats - Dernière réponse le 7 juil. 2011 à 07:59
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.
Lire la suite 

Emboîter commande "FOR" Batch »

4 réponses
Réponse
+3
moins plus
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.
parats - 7 juil. 2011 à 07:59
Merci
Ajouter un commentaire
Réponse
+2
moins plus
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%
) 
parats - 4 juil. 2011 à 21:24
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
Ajouter un commentaire
Ce document intitulé « Emboîter commande "FOR" Batch » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?