OVH Cloud OVH Cloud

comparaison dela date de deux rep, qu'en pensez vous?

6 réponses
Avatar
marc.dufresne
bonjour
voici ce que j'ai fait avec tous les différents conseils mais je crois que
ce prog est un peu lourd
pour comparer les dates de deux rep jeu1 et jeu2 situé sous document mais
obligatoirement seul et contenant eux m^mes des sous rep

rem @echo off
del TEMP.TXT
rem /a:d donne date que des répertoires
rem find"/" n'envois que les lignes avec un / dans temp.txt
dir c:\document\jeu1 /A:D /Tw | find "/" > c:\TEMP.TXT
FOR /F %%i in (temp.txt) do goto 1date
:1date
set datejeu1=%%i
dir c:\document\jeu2 /A:D /Tw | find "/" > c:\TEMP.TXT
FOR /F %%j in (temp.txt) do goto 2date
:2date
set datejeu2=%%j
if datejeu2 GTR datejeu1 goto jeu2
echo "jeu1"
goto :eof
:jeu2
echo "jeu2"
goto :eof

6 réponses

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Il y a de l'idée. C'est un bon début.
Mais, teste donc la comparaison, pour : 24.08.1996 et 20.10.2005...

@-salutations

Michel Claveau
Avatar
Jacques Barathon [MS]
"marc.dufresne" wrote in message
news:
bonjour
voici ce que j'ai fait avec tous les différents conseils mais je crois que
ce prog est un peu lourd


Un peu... ;-)

pour comparer les dates de deux rep jeu1 et jeu2 situé sous document mais
obligatoirement seul et contenant eux m^mes des sous rep

rem @echo off
del TEMP.TXT
rem /a:d donne date que des répertoires
rem find"/" n'envois que les lignes avec un / dans temp.txt
dir c:documentjeu1 /A:D /Tw | find "/" > c:TEMP.TXT


Tu veux comparer les dates de jeu1 et de jeu2 ou les dates de leurs
sous-répertoires? Parce que là tu listes les sous-répertoires de jeu1, pas
jeu1 lui-même. Si tu veux avoir la date de jeu1, il faut ruser un peu:

dir c:document /ad /tw | findstr /e /i " jeu1"

Tu noteras l'espace devant jeu1 dans les guillemets. Cela permet d'éliminer
les répertoires dont le nom se terminerait par "jeu1" ("c:documentmonjeu1"
par exemple). Le paramètre "/e" de findstr, quant à lui, ne retourne que les
lignes se terminant par " jeu1". Tu es donc sûr de ne lister que "jeu1". Ce
filtre remplace d'ailleurs celui que tu avais puisque lui aussi affiche
uniquement la ligne d'info pour le répertoire en question.

FOR /F %%i in (temp.txt) do goto 1date
:1date
set datejeu1=%%i
dir c:documentjeu2 /A:D /Tw | find "/" > c:TEMP.TXT
FOR /F %%j in (temp.txt) do goto 2date
:2date
set datejeu2=%%j
if datejeu2 GTR datejeu1 goto jeu2
echo "jeu1"
goto :eof
:jeu2
echo "jeu2"
goto :eof


Ce que je comprends de la mécanique de ce script (non testé) c'est qu'il va
comparer respectivement chaque sous-répertoire de jeu1 avec chaque
sous-répertoire de jeu2. Au passage, je crois qu'il y a quelques soucis avec
tes goto et tes labels, mais bon, à ce niveau-là c'est un détail... Encore
une fois, est-ce une comparaison de tous les sous-répertoires entre eux que
tu veux?

Quant à la comparaison entre dates, comme l'a souligné Michel, l'opérateur
GTR ne prend pas les données comme des dates mais comme des chaînes de
caractères: 20/01/1996 sera donc supérieur à 12/08/2005 tout simplement
parce que 2 est supérieur à 1. Tu auras donc intérêt à retravailler le
format de la date avant de faire la comparaison. Par exemple:

for /f "delims=/ tokens=1-3" %a in ("%datejeu1%") do set datejeu1=%c%b%a

Cette commande va remettre la date au format an-mois-jour (le tout collé
sans aucun caractère de séparation ce qui est inutile pour la comparaison).
La comparaison pourra donc se faire correctement.

Au final, pour le besoin que tu définissais au début (comparer les dates de
c:documentjeu1 et c:documentjeu2) je ferais le script suivant:

dir c:document /ad /tw | findstr /e /i " jeu1" > c:temp.txt
for /f %%x in (c:temp.txt) do for /f "delims=/ tokens=1-3" %%a in
("%%x") do set datejeu1=%%c%%b%%a
dir c:document /ad /tw | findstr /e /i " jeu2" > c:temp.txt
for /f %%x in (c:temp.txt) do for /f "delims=/ tokens=1-3" %%a in
("%%x") do set datejeu2=%%c%%b%%a
del c:temp.txt
if %datejeu2% GTR %datejeu1% (
echo jeu2 plus récent que jeu1
) else (
echo jeu1 plus récent que jeu2
)

Jacques

Avatar
marc.dufresne
bonjour
je vous remercie (tous ceux qui apportent leur aide) pour l'intérêt et la
patience que vous témoignés
c'est vrai que mon prog ne fonctionnait pas bien comparaison des dates et la
version envoyée était un peu éronnée
j'ai remodifiée le cript pour arriver à ceci (avant de lire ton mail jacques
et de tenir compte de tes conseils que je ferais dans une autre version)
C'est bien la comparaison des dates des répertoires jeu1 et jeu2 et rien que
eux que je veux comparer répertoires qui contiennent des sauvegardes
alternatives
voici mon dernier script et qui fonctionne
cls
@echo off
del c:TEMPdate.TXT
rem /a:d donne date que des répertoires /TW date écriture
rem find"/" n'envois que les lignes avec un / dans tempdate.txt
dir c:SAVjeu1 /A:D /Tw | find "/" > c:TEMPdate.TXT
rem pour chaque ligne de tempdate.txt attribue à datejeu1 la valeur
rem de première occurence i de la ligne
rem et poursuit le prog à la ligne 1date
rem utiliser & plutôt que | (ne fonctionne pas dans FOR
FOR /F %%i in (c:tempDATE.txt) do set datejeu1=%%i & goto 1date
:1date
FOR /f "tokens=1, 2, 3 delims=/" %%k in ("%datejeu1%") do set
jourdatejeu1=%%k & set moisdatejeu1=%%l & set andatejeu1=%%m

dir c:SAVjeu2 /A:D /Tw | find "/" > c:TEMPDATE.TXT
FOR /F %%j in (c:tempDATE.txt) do set datejeu2=%%j & goto 2date
:2date
FOR /f "tokens=1, 2, 3 delims=/" %%n in ("%datejeu2%") do set
jourdatejeu2=%%n & set moisdatejeu2=%%o & set andatejeu2=%%p

echo %jourdatejeu2%%moisdatejeu2%%andatejeu2%jeu2 supérieur à jeu1?
%jourdatejeu1%%moisdatejeu1%%andatejeu1%

rem datejeu2 est supérieure (GTR) datejeu1 aller jeu2

if %andatejeu2% GTR %andatejeu1% goto jeu2
if %andatejeu2% NEQ %andatejeu1% GOTO JEU1
if %moisdatejeu2% GTR %moisdatejeu1% goto jeu2
if %moisdatejeu2% NEQ %moisdatejeu1% goto jeu1
if %jourdatejeu2% GTR %jourdatejeu1% goto jeu2
if %jourdatejeu2% NEQ %jourdatejeu1% goto EGO
:jeu1
echo "jeu1"
goto :eof
:jeu2
echo "jeu2"
goto :eof
:EGO
echo " les deux jeux sont identiques"


encore merci
Avatar
Jacques Barathon [MS]
Ton script tient des raisonnements curieux, même si en effet ça semble
marcher. Le truc le plus bizarre, c'est que quand tu fais ton "FOR /F %%i in
(c:tempdate.txt)" contrairement à ce que tu dis en commentaire tu ne
parcours pas toutes les lignes du fichier mais uniquement la première qui
correspond au répertoire symbolique "." . Cette ligne contient bien la date
de modification du répertoire.

La raison pour laquelle tu ne traites que la première ligne c'est que tu
fais un call dans ce FOR pour lequel il n'y a jamais aucun retour. Même si
ça marche, tu ne maîtrises pas complètement le processus, et si tu devais
faire évoluer ce script tu pourrais être confronté à des problèmes
insolubles qui viendraient de cette construction bancale.

De plus, tes tests en fin de script sont erronnés. J'ai testé sur deux
répertoires qui ont la même date et il me donne jeu1 comme étant supérieur.
Pour que ça marche il faudrait remplacer cette ligne:
if %jourdatejeu2% NEQ %jourdatejeu1% goto EGO

par:

if %jourdatejeu2% NEQ %jourdatejeu1% goto JEU1
goto EGO

Sinon pour le reste, c'est surtout une question de style. Je trouve un peu
lourd le découpage du test en année, mois et jour alors que tu peux tout
concaténer et tester en une seule fois, mais c'est vraiment une question de
goût, à moins que tu sois payé à la ligne :-)

Jacques

"marc.dufresne" wrote in message
news:
bonjour
je vous remercie (tous ceux qui apportent leur aide) pour l'intérêt et la
patience que vous témoignés
c'est vrai que mon prog ne fonctionnait pas bien comparaison des dates et
la
version envoyée était un peu éronnée
j'ai remodifiée le cript pour arriver à ceci (avant de lire ton mail
jacques
et de tenir compte de tes conseils que je ferais dans une autre version)
C'est bien la comparaison des dates des répertoires jeu1 et jeu2 et rien
que
eux que je veux comparer répertoires qui contiennent des sauvegardes
alternatives
voici mon dernier script et qui fonctionne
cls
@echo off
del c:TEMPdate.TXT
rem /a:d donne date que des répertoires /TW date écriture
rem find"/" n'envois que les lignes avec un / dans tempdate.txt
dir c:SAVjeu1 /A:D /Tw | find "/" > c:TEMPdate.TXT
rem pour chaque ligne de tempdate.txt attribue à datejeu1 la valeur
rem de première occurence i de la ligne
rem et poursuit le prog à la ligne 1date
rem utiliser & plutôt que | (ne fonctionne pas dans FOR
FOR /F %%i in (c:tempDATE.txt) do set datejeu1=%%i & goto 1date
:1date
FOR /f "tokens=1, 2, 3 delims=/" %%k in ("%datejeu1%") do set
jourdatejeu1=%%k & set moisdatejeu1=%%l & set andatejeu1=%%m

dir c:SAVjeu2 /A:D /Tw | find "/" > c:TEMPDATE.TXT
FOR /F %%j in (c:tempDATE.txt) do set datejeu2=%%j & goto 2date
:2date
FOR /f "tokens=1, 2, 3 delims=/" %%n in ("%datejeu2%") do set
jourdatejeu2=%%n & set moisdatejeu2=%%o & set andatejeu2=%%p

echo %jourdatejeu2%%moisdatejeu2%%andatejeu2%jeu2 supérieur à jeu1?
%jourdatejeu1%%moisdatejeu1%%andatejeu1%

rem datejeu2 est supérieure (GTR) datejeu1 aller jeu2

if %andatejeu2% GTR %andatejeu1% goto jeu2
if %andatejeu2% NEQ %andatejeu1% GOTO JEU1
if %moisdatejeu2% GTR %moisdatejeu1% goto jeu2
if %moisdatejeu2% NEQ %moisdatejeu1% goto jeu1
if %jourdatejeu2% GTR %jourdatejeu1% goto jeu2
if %jourdatejeu2% NEQ %jourdatejeu1% goto EGO
:jeu1
echo "jeu1"
goto :eof
:jeu2
echo "jeu2"
goto :eof
:EGO
echo " les deux jeux sont identiques"


encore merci




Avatar
marc.dufresne
bonsoir
non je ne suis pas payé à la ligne mais faute d'être astucieux il faut être
courageux c'ast vrai que la méthode que tu m'as indiqué est plus subtile!
C'est vrai aussi que je ne teste pas toute les lignes (le commentaire est
pour moi bien comprendre le fonctionnement de for) et il vrai aussi que je
quitte le teste après la première ligne et je supposais bien que de laisser
en suspens un processus n'est pas très catholique comme on dirait mais je ne
sais pas comment tester qu'une seule ligne dans le fichier, sauter les
première ligne ok,
une chose aussi qu'il ne me semble pas clair c'est les delimiteurs
"delims=." ce délimiteur (point) remplace t'il ceux existant ou est il en
plus?
Et je voulais utilisé "EQU" et pas "NEQ"

merci

"Jacques Barathon [MS]" a écrit dans le
message de news: #
Ton script tient des raisonnements curieux, même si en effet ça semble
marcher. Le truc le plus bizarre, c'est que quand tu fais ton "FOR /F %%i
in

(c:tempdate.txt)" contrairement à ce que tu dis en commentaire tu ne
parcours pas toutes les lignes du fichier mais uniquement la première qui
correspond au répertoire symbolique "." . Cette ligne contient bien la
date

de modification du répertoire.

La raison pour laquelle tu ne traites que la première ligne c'est que tu
fais un call dans ce FOR pour lequel il n'y a jamais aucun retour. Même si
ça marche, tu ne maîtrises pas complètement le processus, et si tu devais
faire évoluer ce script tu pourrais être confronté à des problèmes
insolubles qui viendraient de cette construction bancale.

De plus, tes tests en fin de script sont erronnés. J'ai testé sur deux
répertoires qui ont la même date et il me donne jeu1 comme étant
supérieur.

Pour que ça marche il faudrait remplacer cette ligne:
if %jourdatejeu2% NEQ %jourdatejeu1% goto EGO

par:

if %jourdatejeu2% NEQ %jourdatejeu1% goto JEU1
goto EGO

Sinon pour le reste, c'est surtout une question de style. Je trouve un peu
lourd le découpage du test en année, mois et jour alors que tu peux tout
concaténer et tester en une seule fois, mais c'est vraiment une question
de

goût, à moins que tu sois payé à la ligne :-)

Jacques

"marc.dufresne" wrote in message
news:
bonjour
je vous remercie (tous ceux qui apportent leur aide) pour l'intérêt et
la


patience que vous témoignés
c'est vrai que mon prog ne fonctionnait pas bien comparaison des dates
et


la
version envoyée était un peu éronnée
j'ai remodifiée le cript pour arriver à ceci (avant de lire ton mail
jacques
et de tenir compte de tes conseils que je ferais dans une autre version)
C'est bien la comparaison des dates des répertoires jeu1 et jeu2 et rien
que
eux que je veux comparer répertoires qui contiennent des sauvegardes
alternatives
voici mon dernier script et qui fonctionne
cls
@echo off
del c:TEMPdate.TXT
rem /a:d donne date que des répertoires /TW date écriture
rem find"/" n'envois que les lignes avec un / dans tempdate.txt
dir c:SAVjeu1 /A:D /Tw | find "/" > c:TEMPdate.TXT
rem pour chaque ligne de tempdate.txt attribue à datejeu1 la valeur
rem de première occurence i de la ligne
rem et poursuit le prog à la ligne 1date
rem utiliser & plutôt que | (ne fonctionne pas dans FOR
FOR /F %%i in (c:tempDATE.txt) do set datejeu1=%%i & goto 1date
:1date
FOR /f "tokens=1, 2, 3 delims=/" %%k in ("%datejeu1%") do set
jourdatejeu1=%%k & set moisdatejeu1=%%l & set andatejeu1=%%m

dir c:SAVjeu2 /A:D /Tw | find "/" > c:TEMPDATE.TXT
FOR /F %%j in (c:tempDATE.txt) do set datejeu2=%%j & goto 2date
:2date
FOR /f "tokens=1, 2, 3 delims=/" %%n in ("%datejeu2%") do set
jourdatejeu2=%%n & set moisdatejeu2=%%o & set andatejeu2=%%p

echo %jourdatejeu2%%moisdatejeu2%%andatejeu2%jeu2 supérieur à jeu1?
%jourdatejeu1%%moisdatejeu1%%andatejeu1%

rem datejeu2 est supérieure (GTR) datejeu1 aller jeu2

if %andatejeu2% GTR %andatejeu1% goto jeu2
if %andatejeu2% NEQ %andatejeu1% GOTO JEU1
if %moisdatejeu2% GTR %moisdatejeu1% goto jeu2
if %moisdatejeu2% NEQ %moisdatejeu1% goto jeu1
if %jourdatejeu2% GTR %jourdatejeu1% goto jeu2
if %jourdatejeu2% NEQ %jourdatejeu1% goto EGO
:jeu1
echo "jeu1"
goto :eof
:jeu2
echo "jeu2"
goto :eof
:EGO
echo " les deux jeux sont identiques"


encore merci








Avatar
Do Re Mi chel La Si Do
Delims remplace.

Bonsoir.

MCI