Batch : Traitement sur une date de fichier

Résolu/Fermé
SCOU75 - 24 juin 2012 à 10:14
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 - 24 juin 2012 à 15:14
Bonjour,

Novice en batch je galère pour créer un batch d'organisation de fichiers assez simple.

1/ Liste des fichiers d'un répertoire
2/ Pour chaque fichiers, récupération de la date de modification du fichier
3/ Création d'un répertoire au format AAAAMMJJ (Ex : 20120624)

Je bloque à cette étape, .

Voici mon script :
@echo off
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set jj=%%a:~0,2%
echo jj = %jj%
set mm=%%a:~3,2%
echo mm = %mm%
set yy=%%a:~8,2%
echo yy = %yy%
set REP=%yy%%mm%%jj%
echo %REP% & mkdir %REP%)

Voici le résultat lorsque je l'exécute :
28/05/2012
jj = 28/05/2012:~0,2
mm = 28/05/2012:~3,2
yy = 28/05/2012:~8,2
'28/05/2012:~8,2''28/05/2012:~3,2''28/05/2012:~0,2'
La syntaxe de la commande n'est pas correcte.

Merci d'avance de votre aide.

La suite du programme sera de ne créer le répertoire que s'il n'existe pas et de déplacer le fichier dans ce répertoire. L'objectif étant d'avoir mes fichiers d'organiser par date à chaque fois que je récupère mes photos sur mon PC.

1 réponse

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
24 juin 2012 à 11:08
hello
à l'intérieur d'une boucle for, il faut utiliser ! pour modifier des variables
essayer:
@echo off
setlocal enableDelayedExpansion
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set n=%%a
set jj=!n:~0,2!
echo jj = !jj!
set mm=!n:~3,2!
echo mm = !mm!
set yy=!n:~6,4!
echo yy = !yy!
set REP=!yy!!mm!!jj!
echo !REP! & mkdir !REP!) 
0
J'ai comportement étragne lors de la définition de la variable n (set n=%%a)
Lorsque j'affiche &&a en début de boucle j'obtiens "19/05/2012" et si j'affiche %n% après l'affectation j'obtiens "24/06/2012" qui est la date du jour.

Rappel de mon script :
@ECHO OFF
setlocal enableDelayedExpansion
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set n=%%a
echo %n%
)
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
24 juin 2012 à 14:43
parce que dans la boucle, il faut utiliser ! sauf pour %%a
@ECHO OFF
setlocal enableDelayedExpansion
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set n=%%a
echo !n!
)
0
Eureka, j'ai une version qui fonctionne aprés avoir suivi cette manipulation :
1) Cliquez sur Démarrer/Exécuter puis saisissez : regedit
2) Ouvrez HKEY_CURRENT_USER\Software\Microsoft\Command Processor.
3) Dans le volet de droite créez une nouvelle valeur DWORD nommée DelayedExpansion.
4) Éditez cette valeur et affectez comme données de la valeur le chiffre 1.
5) Quittez puis relancez "cmd".

Le script qui fonctionne :
@ECHO OFF
setlocal enableDelayedExpansion
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set n=%%a
echo n : !n!
set jj=!n:~0,2! && echo jj : !jj!
set mm=!n:~3,2! && echo mm = !mm!
set yy=!n:~8,2! && echo yy = !yy!
set REP=!yy!!mm!!jj! && echo REP : !REP!
)

Resultat affiché :
19/05/2012
n : 19/05/2012
jj : 19
mm = 05
yy = 12
REP : 12 05 19

Question : Savez-vous comment faire pour concaténer mes variables yy mm et jj sans avoir d'espace ?
0
Le pb venait d'un espace à la fin des variable jj mm et yy.
En les forçant en numeriable, le pb est détourné.

Script final :
@ECHO OFF
setlocal enableDelayedExpansion
set nom=%1%
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do (
echo %%a
set n=%%a && echo n : "!n!"
set /a jj=!n:~0,2! && echo jj : "!jj!"
set /a mm=!n:~3,2! && echo mm = "!mm!"
set /a yy=!n:~6,4! && echo yy = "!yy!"
set REP=!yy!-!mm!-!jj! && echo REP : "!REP!"
mkdir !REP!
)

Résultat :
19/05/2012
n : "19/05/2012 "
jj : "19"
mm = "5"
yy = "2012"
REP : "2012-5-19 "
Et le répertoire "2012-5-19" est bien créée

Merci pour votre aide sur le ! dans les FOR, je n'avais rien vu sur le sujet et j'aurais pu chercher longtemps.
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
24 juin 2012 à 15:14
changer
set jj=!n:~0,2! && echo jj : !jj!
set mm=!n:~3,2! && echo mm = !mm!
set yy=!n:~8,2! && echo yy = !yy! 
par
set jj=!n:~0,2!
echo jj : !jj!
set mm=!n:~3,2!
echo mm = !mm!
set yy=!n:~8,2!
echo yy = !yy!
0