Programme Batch Dos / probleme "IF"
Résolu
Spectoo
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
j'ai vendu mon nick -
j'ai vendu mon nick -
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 ?
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 ?
A voir également:
- Programme Batch Dos / probleme "IF"
- Fichier batch - Guide
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
6 réponses
Bonjour,
Tu as un peu oublié les %
if "%VERI1%" NEQ "%VERI2%" (XCOPY "C:\TEST\"*.*/s/y C:\BACKUP\%ANNEE%\%MOIS%\%JJ%\)
exit
Tu as un peu oublié les %
if "%VERI1%" NEQ "%VERI2%" (XCOPY "C:\TEST\"*.*/s/y C:\BACKUP\%ANNEE%\%MOIS%\%JJ%\)
exit
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 ?
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 ?
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 :
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é.
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é.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 !! ;)
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 !! ;)
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
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
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.
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.