[Batch] script executé par serveur pour systeme de backup

script executé par serveur pour systeme de backup [Batch] - Shell/Batch - Programmation

Marsh Posté le 22-04-2006 à 00:09:53    

Bonjour à tous,
 
Je dois (très rapidement) ecrire des fichiers .bat pour un serveur, dans le cadre d'un projet professionnel, or je n'ai jms codé en batch et cela risque de me prendre du temps (trop).
Je suis sûr qu'il y'a parmi vous des pros de batch qui pourront faire ca en 5min ;) , alors par avance merci si vous pouvez m'aider :
 
    * Il faut un fichier (qui sera executé tous les soirs vers 1h du mat) qui, dans un repertoire donné X, parcours tous les sous repertoires A,B,C.... Dans chacun de ces sous repertoires il recupere les fichiers qui ont été modifié la veille et si il y'en a, crée un repertoire portant la date de la veille (du type YYYY-MM-DD) et deplace les fichiers trouvés à l'interieur. Ainsi au final on aura une arborescence du type A>2006-04-20, A> 2006-04-19, B>2006-04-20, etc.....
 
Voila déjà si j'ai ça ce serait vraiment génial !
 
    * Dans un deuxième temps il faudrait que ce même script ou un autre, lors de la consultation de chaque sous repertoire A,B,C,.. verifie si un repertoire porte le nom d'une date supérieur à 90 jours, dans ce cas il le deplace vers un autre lecteur....
 
    * Pour finir...... comme cette arborescence n'a pas été mis en place depuis le debut du backup, actuellement les sous repertoires A,B,C,... sont pleins de fichiers modifiés a des dates differentes. Il faudrait donc un dernier script permettant de trier et ranger tous les fichiers existant comme indiqué ci-dessus.
 
Ouf ! c'est fini. Je vous remercie par avance.

Reply

Marsh Posté le 22-04-2006 à 00:09:53   

Reply

Marsh Posté le 22-04-2006 à 09:01:21    

[:zytrahusathome]

Reply

Marsh Posté le 22-04-2006 à 10:28:30    

^^ mais encore ?

Reply

Marsh Posté le 22-04-2006 à 10:54:58    

Bah tu ne veux pas un Max et 100E en plus ??
 
Le forum est là pour t'aider à résoudre un souci précis, pas pour faire le boulot à ta place (cf. charte entre autres).
 
Sans compter que la recherche existe, que ces problèmes ont déjà abordés 200 fois mini, que avec un minimum d'efforts tu aurais trouvé un truc qui marche à peu près, alors tu débarques comme ça, tu lances direct ton sujet genre "je passe plus tard ramasser les copies", ça le fait moyen quoi ! :sarcastic:
 
Si tout le monde fait comme toi, on n'est pas sortis de l'auberge.

Reply

Marsh Posté le 22-04-2006 à 12:04:37    

wackevat a écrit :

Bah tu ne veux pas un Max et 100E en plus ??


un Mars... non j'aime pas ca..
 
Plus sérieusement, je n'ai demandé à personne de me pondre le script niquel d'un coup..... toute aide, que ce soit des liens, ou des éléments de réponse, est bienvenue.
Le but étant pour moi de ne pas passer des heures à chercher sur le net, pour quelque chose d'assez simple (mais lorsque l'on a jamais programmé dans un langage, simple ou pas, ca prend tjs du temps).
 
Merci à toi d'avoir pris le temps de lire mon sujet.

Reply

Marsh Posté le 22-04-2006 à 12:18:21    

placebomuse2 a écrit :

je n'ai demandé à personne de me pondre le script niquel d'un coup..... toute aide, que ce soit des liens, ou des éléments de réponse, est bienvenue.


Justement on n'a rien vu de tout ça dans ton post d'ouverture.
 
Et je répète, la fonction de recherche marche très bien et ton sujet n'a rien de nouveau.

Reply

Marsh Posté le 22-04-2006 à 14:03:49    

wackevat a écrit :

Justement on n'a rien vu de tout ça dans ton post d'ouverture.
 
Et je répète, la fonction de recherche marche très bien et ton sujet n'a rien de nouveau.


 
Dsl alors si je ne me suis pas fait comprendre, je repete je cherche donc juste des fragments de code me permettant d'aboutir au script que j'ai énoncé plus haut.
 
J'ai déjà effectué des recherches sur le forum et je dispose d'un tutoriel, mais je n'ai pas vraiment reussi à exploiter ce que j'ai trouvé.  
Je répéte je n'ai absolument aucune notion en script batch, je passe la plupart de mon temps à programmer en Java... bref, rien à voir.  

Reply

Marsh Posté le 22-04-2006 à 14:46:00    

Et qu'est-ce que tu as déjà trouvé ? Qu'est-ce qui fonctionne déjà ? Quels sont les messages d'erreur retournés par le script actuel ?

Reply

Marsh Posté le 22-04-2006 à 15:50:49    

Par exemple, peut-on faire directement des operations sur les dates ? Car pour recuperer les fichiers modifiés la veille dans le repertoire A puis creer un sous repertoire A/date de la veille, ce serait plus pratique que :

Citation :


Code :
 
FOR /F "tokens=1* delims=/" %%A IN ("%DATE%" ) DO SET DAY=%%A
SET /A DAY=%DAY%-1
FOR /F "tokens=2-3* delims=/" %%A IN ("%DATE%" ) DO SET DIRNAME=%%B-%%A-
SET DIRNAME=%DIRNAME%%DAY%
ECHO %DIRNAME%


ceci marche très bien mais dans l'état actuel il faudrait une batterie de test pour verifier qu'on est pas le 1er du mois, si le mois d'avant a 30 ou  31 jours, si l'année est bisextile...etc

Message cité 1 fois
Message édité par placebomuse2 le 22-04-2006 à 15:51:57
Reply

Marsh Posté le 22-04-2006 à 16:14:01    

placebomuse2 a écrit :

ceci marche très bien mais dans l'état actuel il faudrait une batterie de test pour verifier qu'on est pas le 1er du mois, si le mois d'avant a 30 ou  31 jours, si l'année est bisextile...etc


Par exemple :
http://forum.hardware.fr/hardwaref [...] 3264-1.htm
http://forum.hardware.fr/hardwaref [...] 4243-1.htm

Reply

Marsh Posté le 22-04-2006 à 16:14:01   

Reply

Marsh Posté le 24-04-2006 à 14:02:41    


Merci bien !

 

J'ai un petit soucis, voici un bout de mon code :

 
Citation :

:CHKFILES
 

 


for %%a in (%mypath%*) do call :CHKTHISFILE %%a
 

 

 


:CHKTHISFILES
 
set myfile=%*
 
ECHO %myfile%
 
dir %myfile% > dir.tmp
 
findstr %MYDATE% dir.tmp
 

 

Ca marche, mais ca ne boucle pas ! Après avoir traité le 1er fichier du repertoire, le prog s'arrete.

 

Avez-vous une idée ?

 

Merci  :jap:

 

Reply

Marsh Posté le 24-04-2006 à 15:23:41    

^^ bon si en fait ca boucle :D
en revanche j'ai un autre soucis :
 

Citation :


:CHKFILES
for %%a in (%mypath%*) do call :CHKTHISFILE %%a
goto END
 
 
:CHKTHISFILE
set myfile=%*
ECHO %myfile%
dir %myfile% > dir.tmp
findstr %MYDATE% dir.tmp
 
if ERRORLEVEL 0 xcopy %myfile% %mypath%%DIRNAME%
 


 
Quelque soit le resultat de findstr, le prog rentre dans le if, pourquoi ?

Reply

Marsh Posté le 24-04-2006 à 15:29:50    

placebomuse2 a écrit :


Quelque soit le resultat de findstr, le prog rentre dans le if, pourquoi ?


 
Un IF errorlevel X passe quand la valeur de l'erreur est SUPERIEURE ou égale au chiffre indiqué.
 
Par conséquent un IF errorlevel 0 passe dans tous les cas.


Message édité par PepMat le 24-04-2006 à 15:30:23
Reply

Marsh Posté le 24-04-2006 à 15:34:03    

^^ merci c parfait ;)

Reply

Marsh Posté le 24-04-2006 à 16:31:49    

je cherche maintenant a recuperer uniquement le nom des repertoires appartenant a mon repertoire courant, voici mon code  :
 

Citation :


FOR /F "skip=5 usebackq delims=> tokens=2" %%i IN ('dir %mypath%') DO ECHO %%i


 
J'obtiens :
.
..
Repertoire1
Repertoire2
 
Comment faire pour que les lignes . et .. ne fassent pas parti du résultat ???  
Merci

Reply

Marsh Posté le 24-04-2006 à 16:37:44    

placebomuse2 a écrit :

je cherche maintenant a recuperer uniquement le nom des repertoires appartenant a mon repertoire courant


dir /b /a:d

Reply

Marsh Posté le 24-04-2006 à 17:14:01    

^^ merci :)
 
est-ce que quelqu'un est capable de me dire pkoi lorsque je fais :
 

Citation :


FOR /f in ('dir %mypath% /b /a: d') DO call :CHKDIRFILES %%i
 
:CHKDIRFILES
set getdirectory=%*
set DIRPATH=%mypath%%getdirectory%\%DIRNAME%
MKDIR %DIRPATH%
 


 
(sachant que mypath= test\, que getdirectory=A (B, C, etc..) et DIRNAME=23-04-2006)
 
 le programme me crée bien le répertoire 23-04-2006 dans test\A\ , test\B\, etc... mais qu'il le crée egalement systematiquement dans test\ ??


Message édité par placebomuse2 le 24-04-2006 à 17:14:24
Reply

Marsh Posté le 24-04-2006 à 17:50:21    

Il faut sauter ta procédure après la boucle for :
 

Code :
  1. for ... () do ()
  2. goto end
  3. :chkdirfiles
  4. ....
  5. :end

Reply

Marsh Posté le 24-04-2006 à 18:20:39    

^^ oups...en effet

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed