Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3054 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Batch + roulement de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Batch + roulement de fichier

n°825802
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 13:33:36  profilanswer
 

Salut,
 
J'ai besoin d'un peu d'aide :)
Donc voila, j'ai sql server qui me fait tous les soirs (sauf samedi et dimanche) un dump de plusieurs bases de données.
 
Les bases etant grosses je dois les compresser, j'ai donc fait ce batch (merci Robby pour l'aide)
 

Code :
  1. REM ******************* On declare les variables *******************
  2. set REP=c:\toto
  3. REM ******************* On recherche les dumps a compresser *******************
  4. cd %REP%
  5. :SEARCH_DUMP
  6. if EXIST %REP%\*.bak FOR /F "tokens=1,2* delims=." %%i in ('dir /B *.bak') do SET NOM_BASE=%%i.%%j
  7. if NOT EXIST %REP%\*.bak GOTO END
  8. REM ******************* On compresse le dump *******************
  9. if EXIST %REP%\%NOM_BASE% FOR /F "tokens=1,2* delims=." %%i in ('dir /B %REP%\%NOM_BASE%') do gzip %REP%\%NOM_BASE%
  10. GOTO SEARCH_DUMP
  11. :END
  12. EXIT


 
 
Par contre, SQL me créé un fichier en .bak, et il s'occupe lui même du roulement.
Si je ne fais rien je vais me retrouver avec tout pleins de dump compressé, car sqlserver ne retrouvera pas l'ancienne version.
 
Comment donc faire dans un batch pour comparer plusieurs fichiers avec une certaine extension, resortir le plus vieux et le supprimer ?
 
Dans mon cas actuel on fait comme si il n'y avait qu'une base, apres je vais créer un batch par base pour la compression.
 
Merci pour votre aide :)


Message édité par lebibi le 18-08-2004 à 13:35:29

---------------

mood
Publicité
Posté le 18-08-2004 à 13:33:36  profilanswer
 

n°825807
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 13:53:58  profilanswer
 

et puis aussi voir si la date du fichier n'est pas celle qui vient juste d'etre dumpé histoire de ne pas virer le seul backup :)


---------------

n°825820
Arrakeen
Posté le 18-08-2004 à 14:17:50  profilanswer
 

dejà tu peux utiliser la parametre /OD de la commande DIR pour trier par date...c'est dans l'ordre croissant du plus vieux au plus recent que ça affichera...
si ça t'aide pas, je commence à plancher sur un .bat qui va "comparer plusieurs fichiers avec une certaine extension, resortir le plus vieux et le supprimer"...
 
++
 
Arrakeen

n°825864
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 15:01:07  profilanswer
 

merci :)
je suis trop nul en algo :d


---------------

n°825898
Arrakeen
Posté le 18-08-2004 à 15:43:51  profilanswer
 

voila une petite sub-routine qui delete le plus vieux fichier dans une extension donnee.
la routine s'appelle :DELETEOLDEST
elle s'appelle avec l'extension en parametre.
ex: call :DELETEOLDEST txt
--> deletera le plus vieux fichier txt
 
voici un exemple d'execution:
 
dans un repertoire, j'ai 3 fichiers txt, dont le plus vieux est toto.txt :
 

Code :
  1. C:\old>dir /B /OD *.txt
  2. toto.txt
  3. titi.txt
  4. tata.txt


 
 
voici mon .bat :
 

Code :
  1. @echo off
  2. call :DELETEOLDEST txt
  3. goto EXIT
  4. :DELETEOLDEST
  5. dir /B /OD *.%1 | find "%1" /N | find "[1]" > temp.txt
  6. for /F "tokens=1,2* delims=]" %%i in (temp.txt) do echo le plus vieux fichier %1 est : %%j
  7. del temp.txt
  8. goto EXIT
  9. :EXIT


 
...et son execution :
 

Code :
  1. C:\old>old.bat
  2. le plus vieux fichier txt est : toto.txt


 
 
voilou, t'as plus qu'à remplacer la commande echo par del
 

n°825921
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 16:08:41  profilanswer
 

merci beaucoup :)
 
je l'ai adapté et tout fonctionne comme je veux !!


---------------

n°825922
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 16:11:58  profilanswer
 

une derniere question je voudrais qu'il verifie le nombre de fichier trouvé.
 
C'est a dire, si par exemple il ne trouve que 3 fichiers.txt alors il ne supprime pas le plus vieux et il fait un exit
 
Par contre si il en trouve + de 3 on passe la moulinette.
 
C'est histoire d'avoir tjs 3 versions des dumps au minimum :)
 
C'est possible aussi ?


Message édité par lebibi le 18-08-2004 à 16:15:58

---------------

n°825925
Arrakeen
Posté le 18-08-2004 à 16:15:15  profilanswer
 

vi possible...j'y travaille...

n°825929
lebibi
Notre torture c'est la tourtel
Posté le 18-08-2004 à 16:18:24  profilanswer
 

merci, ne te presse pas, y a pas trop le feu :)


---------------

n°825936
Arrakeen
Posté le 18-08-2004 à 16:31:28  profilanswer
 

hop, voici mon .bat révisé :
 

Code :
  1. @echo off
  2. call :DELETEOLDEST txt
  3. goto EXIT
  4. :DELETEOLDEST
  5. :: je recup le nombre de fichiers dans la variable count
  6. dir /B /OD *.%1 | find /C "%1" > temp
  7. for /F "tokens=1 delims=" %%i in (temp) do set count=%%i
  8. :: je teste le count, si sup à 3 je supprime le plus vieux
  9. if "%count%" GTR "3" (
  10. dir /B /OD *.%1 | find "%1" /N | find "[1]" > temp
  11. for /F "tokens=1,2* delims=]" %%i in (temp) do echo je delete %%j
  12. del temp
  13. )
  14. goto EXIT
  15. :EXIT


Message édité par Arrakeen le 18-08-2004 à 16:32:27
mood
Publicité
Posté le 18-08-2004 à 16:31:28  profilanswer
 

n°826472
lebibi
Notre torture c'est la tourtel
Posté le 19-08-2004 à 09:32:11  profilanswer
 

Encore un grand merci à toi, je test ca de suite :)
 
A+


---------------

n°826937
lebibi
Notre torture c'est la tourtel
Posté le 19-08-2004 à 17:11:40  profilanswer
 

un derniere question :
 
dans un batch principale de je vais appeler tous mes autres batch (environ 15) mais je voudrais qu'il me les lance 1 par 1
 
j'ai mis ca :
 
 
start batch1
start batch2
start batch3
 
Mais il va me les lancer en meme temps non ?
Comment faire pour lui dire d'attendre ? Mettre un sleep ?


---------------

n°826940
lebibi
Notre torture c'est la tourtel
Posté le 19-08-2004 à 17:17:10  profilanswer
 

bon j'ai trouvé, en faisant un call et en virant les EXIT a la fin des autres scripts ;)
 
A+


---------------

n°826941
Arrakeen
Posté le 19-08-2004 à 17:17:44  profilanswer
 

non c bon, il devrait les lancer 1 par 1...on peut pas faire du pseudo parallelisme en DOS comme sous unix avec le '&' pour lancer les scripts en background...en DOS, tout s'execute sequentiellement...

n°826983
Arrakeen
Posté le 19-08-2004 à 17:39:22  profilanswer
 

bon, dans le doute, fait des :
 
start /WAIT batch1
start /WAIT batch2
:
 
fait un help start pour voir toutes les options...
 

n°827016
lebibi
Notre torture c'est la tourtel
Posté le 19-08-2004 à 18:03:30  profilanswer
 

c'est bon ca tourne aussi avec les call
j'ai pu recuperer 25 Go d'espace disque quand même a compresser les dumps :)
 
je verrais demain maintenant si le prog a bien fonctionné cette nuit :)
 
Merci encore à toi Arrakeen :)


---------------

n°827018
Arrakeen
Posté le 19-08-2004 à 18:05:17  profilanswer
 

de rien l'ami, tout le plaisir est pour moi ;-)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Batch + roulement de fichier

 

Sujets relatifs
Droits d'accès pour envoie de fichier par formulaire[C++/wxWidgets/MSW] Savoir si un fichier est système
[VBS] Obtenir le nom long du fichier par clic droitCommande DOS : uploader un fichier
C++ ou C# pour une application de gestionde fichier[BATCH-DOS]question a l'utilsateur et enregistrement de variable??
Parcours d'un fichier Excel[batch]Réccupérer la date de création/modification d'un fichier,
Mettre le contenu d'un fichier dans une variable 
Plus de sujets relatifs à : Batch + roulement de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR