Rechercher : dans
Par :

Programme Batch Dos / probleme "IF"

Dernière réponse le 28 oct 2009 à 19:22:04 Spectoo, le 6 nov 2008 à 10:49:57 
 Signaler ce message aux modérateurs

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 ?

Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « programme Batch Dos / probleme "IF" » dans :
Désactiver le bip du haut-parleur interne (Win 2000/XP/Vista) VoirMême si vous coupez le son, les programmes Ms-Dos peuvent encore faire "biper" le haut-parleur interne de l'ordinateur. Cela peut être agaçant. Voici comment le désactiver une bonne fois pour toutes. Tapez dans une fenêtre MS-Dos...
Fichiers et répertoires VoirLes fichiers sous DOS Sur un ordinateur les informations sont stockées dans des fichiers. Lorsqu'on exécute un programme, MS-DOS traite les informations situées dans le fichier et les transmet au système. Sous MS-DOS chaque fichier peut être aussi...

1

cchristian, le 6 nov 2008 à 11:06:46

Bonjour,

Tu as un peu oublié les %

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

exit
Cordialement.

Cchristian.

Répondre à cchristian

2

Spectoo, le 6 nov 2008 à 12:00:31

Jsuis un ane !

^^

merci beaucoup !

Répondre à Spectoo

3

cchristian, le 6 nov 2008 à 12:30:55

Mais non, mais non, allons ! Cordialement.

Cchristian.

Répondre à cchristian

4

Spectoo, le 6 nov 2008 à 13:51:09

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 ?

Répondre à Spectoo

5

cchristian, le 6 nov 2008 à 15:38:20

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é.

Cordialement.

Cchristian.

Répondre à cchristian

6

Spectoo, le 6 nov 2008 à 17:31:02

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 !! ;)

Répondre à Spectoo

7

cchristian, le 6 nov 2008 à 18:08:10

Merci pour ce retour sympathique, à bientôt j'espère pour de nouvelles aventures CCM. Cordialement.

Cchristian.

Répondre à cchristian

8

samen123, le 28 oct 2009 à 19:14:08

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

Répondre à samen123

9

 j'ai vendu mon nick, le 28 oct 2009 à 19:22:04

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.

Répondre à j'ai vendu mon nick