Programme Batch Dos / probleme "IF"

Résolu/Fermé
Spectoo Messages postés 18 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 10 avril 2009 - 6 nov. 2008 à 10:49
 j'ai vendu mon nick - 28 oct. 2009 à 19:22
Bonjour,

J'ai un léger souci sur un programme batch que j'essaye de mettre en œuvre.
Je veux, grâce a ce programme, remplacer des fichiers de backup seulement si la date de modification est différente, et sinon ne rien faire. j'arrive déjà a trouver les date de modif et à les mettre dans des variables mais j'ai un problème avec la condition IF.
(je suis très novice en batch)
Voici le code que j'ai pour le moment :

debut du code

@echo off
for /F "tokens=1-4 delims=/ " %%A in ('date /t') do (set JJ=%%A&set MM=%%B&set AA=%%C&set RESTE=%%D)
set ANNEE=%AA%
set MOIS=%MM%
set JOUR=%JJ%

//***********recherche des dates de modification*****************\\
dir /TW C:\TEST | find "TEST.txt" /i > C:\TEMP\temp.txt
for /F "tokens=1 delims= " %%i in (C:\TEMP\temp.txt) do set VERI1=%%i

dir /TW C:\BACKUP\%ANNEE%\%MOIS%\%JJ%\ | find "TEST.txt" /i > C:\TEMP\temp2.txt
for /F "tokens=1 delims= " %%i in (C:\TEMP\temp2.txt) do set VERI2=%%i


if "VERI1" NEQ "VERI2" (XCOPY "C:\TEST\"*.*/s/y C:\BACKUP\%ANNEE%\%MOIS%\%JJ%\)

exit

fin du code

Ici ; que la condition soit vérifiée ou non il copie quand même les fichiers

Y'a t-il un crack en programmation DOS qui pourrait me venir en aide ?

6 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 nov. 2008 à 11:06
Bonjour,

Tu as un peu oublié les %

if "%VERI1%" NEQ "%VERI2%" (XCOPY "C:\TEST\"*.*/s/y C:\BACKUP\%ANNEE%\%MOIS%\%JJ%\)

exit
0
Spectoo Messages postés 18 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 10 avril 2009
6 nov. 2008 à 12:00
jsuis un ane !

^^

merci beaucoup !
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 nov. 2008 à 12:30
Mais non, mais non, allons !
0
Spectoo Messages postés 18 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 10 avril 2009
6 nov. 2008 à 13:51
Alors ... vu que c'était vraiment simple et que je ne vous ai pas donné beaucoup de travail, je vais corser la chose.

La recherche de date de modification me renvoie ceci par exemple ceci :

06/11/2008 11:59 0 TEST.txt


Ce qui m'intéresserai maintenant c'est de pouvoir comparer exactement cette date et cette heure à la date et l'heure actuelle ... je suppose qu'une fonction ressemblant a "explode" utilisée en php pourrait sans doute faire ce travail.

Avez-vous une idée ?
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 nov. 2008 à 15:38
A ma connaissance il n'existe pas de fonction MS-DOS sous XP permettant d'effectuer des opérations sur les heures ou sur les dates. A vérifier quand même. Dans l'ignorance je te propose ce qui suit :

cls
SET "cur_date=%DATE:~0,2%/%DATE:~3,2%/%DATE:~6,4%"

rem Sauvegarde de l'horaire courant.
SET "TTIME=%TIME%"
rem Pour test
SET  "TTIME=11:59 00"
rem ------------------------

rem   Restauration éventuelle du zéro manquant en tête d'un horaire dont le nb.
rem   d'heures est inférieur à 10. Ex: 0:39:01,51
      IF       "%TTIME:~0,1%"        ==     " "                   (
           SET "TTIME=0%TTIME:~1,8%"     )

SET "cur_time=%TTIME:~0,2%:%TTIME:~3,2% %TTIME:~6,2%"

rem Pour test :
  IF "%cur_date%"                   == "06/11/2008"   (
          ECHO OK
          ECHO      cur_date    %cur_date%            )

  IF "%cur_time%"                   == "11:59 00"     (
          ECHO OK
          ECHO      cur_time    %cur_time%            )
rem ------------------------


Ce qui m'intéresserai maintenant c'est de pouvoir comparer exactement cette date et cette heure à la date et l'heure actuelle ... je suppose qu'une fonction ressemblant a "explode" utilisée en php pourrait sans doute faire ce travail.
- Je n'ai pas très bien compris pourquoi tu souhaites comparer "exactement" l'horaire actuelle avec celle du fichier.
- Pour illustrer le problème j'ai mis en "dur" dans les IF, la date et l'horaire du fichier.

J'espère que ça correspond à ton attente. Effectue des tests de ton côté, tiens-moi informé.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Spectoo Messages postés 18 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 10 avril 2009
6 nov. 2008 à 17:31
oh merci beaucoup ! quel rapidité :)

En fait je suis en train de me demander si j'ai réellement besoin de comparer ces dates et heures; je m'explique :

il s'agit de l'optimisation d'un backup ... si les fichiers n'ont pas changé, il n'écrase pas l'ancienne version. Mais du coup je me dis que de faire le test de différence (NEQ) est suffisant car si le fichier a changé, la date de modification est forcément supérieur a celle du fichier sauvegardé donc pas besoin de plus de vérif.

En tout cas, je garde ce bout de code qui servira certainement un de ces jours !

Merci beaucoup pour ta collaboration ; j'ajouterai un "developped by Cchristian" dans le prog !! ;)
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 nov. 2008 à 18:08
Merci pour ce retour sympathique, à bientôt j'espère pour de nouvelles aventures CCM.
0
samen123 Messages postés 1 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009 > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
28 oct. 2009 à 19:14
Bonjour cchristian
Moi aussi je vais abuser de ta gentillesse avec un peu de retard.Car en cherchant sur le forum CMC j'ai truvé le texte de ton aide pour quelqu'un datant de Nov 2008.J'ai besoin d'une petite aide si c'est possible.
Voilà j'ai fait un fichier bat pour sauvegarder mes données d'une base de données que j'utilise chaque jour
sur ma clé usb qui se trouve dans mon poste à la racine e:
le fichier bat est le suivant:
copy c:\dossier1\fichier1.fff e:
copy c:\dossier1\dossier2\*.* e:\dossier2
Pour la première ligne il n'y a pas de problèmes.(un fichier1 archive est sauvegardé dans l'usb)
Mais pour la deuxieme ligne ,il me recopie tous les fichiers du dossier2(une centaine)alors qu'ils existent tous dans mon dossier2 de l'usb, sauf un, le dérnier, celui du jour de la sauvegarde ,et bien sûr la deuxieme ligne met beaucoup de temp à se réaliser.Alors que s' il copiait que le ou les fichiers qui n'existent pas dans e:\dossier2 et les autres non puisqu'ils y sont la sauvegarde se passerait en une fraction de secondes.
Je sais qu'il faut utiliser un IF ,mais je n'arrive pas à réussir mon programme .Alors si tu peux m'aider j'en serais très reconnaissant.MERCI
0
j'ai vendu mon nick
28 oct. 2009 à 19:22
salut

la commande XCOPY avec l'option /M ne te conviendrait-elle pas ?
elle te permet de copier les fichiers dont l'attribut A (=à archiver) est levé (tout en le baissant lors de la copie)
c'est la méthode rudimentaire pour faire de la sauvegarde incrémentale... ce qui semble être ce que tu désires.
0