configuration de Robocopy (scripts)

configuration de Robocopy (scripts) - Logiciels - Windows & Software

Marsh Posté le 17-03-2008 à 14:05:51    

Bonjour à tous,
 
Dans le cadre de mon travail je dois faire en sorte de maintenir à jour un dossier partagé sur un ordinateur portable en rendant disponible une copie de ce dossier sur un disque dur externe relié au serveur.
J'ai utilisé Robocopy GUI pour créer des scripts qui me permettront de mener à bien cette tâche. Je veux avoir 2 scripts le premier me permettant de faire une première copie intégrale d'un répertoire source (dossier partagé du portable) vers un répertoire cible (dossier sur disque dur externe).
 
Mes tests sont concluants mais je veux ici avoir la confirmation que mes paramètres sont corrects et ne poseront pas de problème à l'avenir.
 
 
InitScript.cmd - Script pour la copie initiale (rien n'existe dans le répertoire cible) :
 
robocopy "\\portable\partage$" "F:\_DATA" /E /COPYALL /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB
/R:10 /W:30

 
/E -> copier même les dossiers vides
/COPYALL -> tout copier
/V -> donner le résumé de la copie
/NP -> masquer l'indicateur de progression de la copie
/LOG+ -> inscrire les infos de copie dans RobocopyLOG.txt et ajouter les infos de copie à la suite de ce fichier
/ZB -> copie en mode "redémarrage si plantage", passage en "mode normal" si échec de copie
/R -> réesayer 10 fois de copier si plantage
/W -> attendre 30 secondes entre chaque tentative (cf: /R)
 
 
 
Une fois la première copie réalisée je veux maintenant automatiser la mise à jour des dossiers/fichiers contenus dans le dossier du portable. Ainsi, ce script mettra à jour les modifications effectuées dans le répertoire source de telle sorte que le dossier sur le disque dur (cible) soit une copie parfaite du répertoire du portable (source).
 
 
MajScript.cmd - Script pour maintenir à jour l'arborescence (la copie initale a eu lieu) :
 
robocopy "\\portable\partage$" "F:\_DATA" /MIR /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB /R:10
/W:30

 
/MIR -> cloner une arborescence
 
 
 
Au final, j'utiliserai le planificateur de tâches pour lancer "MajScript.cmd" tous les jours à 13h. En sachant que le
répertoire source est un dossier partagé sur un ordinateur portable je pense faire la chose suivante pour qu'aucun problème d'authentification ne se manifeste...
 
@NET USE P: \\portable\partage$ mot_de_passe /USER:nom_utilisateur
@robocopy "P:" "F:\_DATA" /MIR /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB /R:10 /W:30

 
Ainsi, le script "MajScript.cmd" va tout d'abord affecter le lecteur réseau "P:" au partage masqué "\\portable\partage$" ayant comme nom d'utilisateur "nom_utilisateur" et comme mot de passe "mot_de_passe". Ensuite, robocopy effectue un clone de "P:" (source) vers "F:\_DATA" (cible). Enfin, avec le planificateur de tâches ce fichier "MajScript.cmd" est lancé tous les jours à 13h
 
 
QUESTIONS:
 
1) Est-ce que mes scripts sont corrects (à la vue de mes tests persos oui mais je débute avec Robocopy et peut-être que des pros de cet utilitaire pourront m'aider à les améliorer) ?
 
2) Le dossier source (sur un ordi portable) n'est pas toujours accessible sur le réseau (portable hors base) et je
voulais savoir ce qui se passe si MajScript.cmd se lance à 13h et que le chemin réseau "\\portable\partage$" est introuvable ?
 
Tout commentaire est le bienvenu, je débute avec Robocopy mais je sais précisément ce que je veux faire de cet utilitaire que je trouve génial!
 
A bientôt et merci pour votre attention
-vipclimax-

Reply

Marsh Posté le 17-03-2008 à 14:05:51   

Reply

Marsh Posté le 17-03-2008 à 14:28:25    

pourquoi pas un /MIR direct directement, ça marche très bien.
 
De plus, /R:10 /W:30, par expérience je trouve ça trop, imagines que t'as une centaine de petits fichiers qui déconne, ta copie va être méga longue, perso je mets /R:3 /W:1, et si vraiment ça passe pas je me débrouille après grace au log

Reply

Marsh Posté le 17-03-2008 à 16:56:15    

pour le 2) regarde du coté du mot clé ERRORLEVEL sous dos qui te permettra de ne pas lancer robocopy si net use en erreur.

Reply

Marsh Posté le 17-03-2008 à 18:13:16    

Merci pour vos réponses!
 
Bien vu gouiy@aume pour les paramètres "/R" et "/W" je vais mettre les mêmes paramètres que les tiens.
 
djobidjoba -> effectivement mon script serait nickel si je pouvais lui indiquer de ne pas déclencher "robocopy" si le "net use" est en erreur par contre je vois pas trop comment retranscrire ça dans mon script final... quelqu'un peut me donner un coup de main svp ???

Reply

Marsh Posté le 17-03-2008 à 18:23:53    

Je suis sur une piste... le code erreur généré par le "NET USE" lorsque "Le chemin réseau n'a pas été trouvé" est 53 donc...
 
 
If errorlevel 53 if not errorlevel 54 goto sortir
 
:sortir
exit

 
 
Suis-je sur la bonne piste ???

Reply

Marsh Posté le 18-03-2008 à 00:23:55    

Je crois bien que je le tiens mon script!
Voilà ce que j'ai mis dans mon Notepad et enregistré sous FinalScript.cmd pour pouvoir après le lancer automatiquement tous les jours à 13h à l'aide du planificateur de tâches Windows...
 
 
@NET USE P: \\portable\partage$ mot_de_passe /USER:nom_utilisateur
@IF ERRORLEVEL 53 IF NOT ERRORLEVEL 54 GOTO exit
:exit
@EXIT
@ROBOCOPY "P:" "F:\_DATA" /MIR /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB /R:3 /W:1

 
 
Description du script :

  • 1ère ligne = connexion du partage masqué "partage$" au lecteur réseau "P:" ayant comme login/mot de passe d'accès "nom_utilisateur/mot_de_passe"
  • 2ème ligne = Si le chemin réseau de la 1ère ligne n'existe pas aller à la 3ème ligne
  • 3ème et 4ème lignes = destination du script si la condition de la 2ème ligne est remplie / sortie de la fenêtre DOS
  • 5ème ligne = si la condition de la 2ème ligne n'est pas remplie (le chemin réseau existe) clonage de "P:" (source) vers "F:\_DATA" (destination)


Je débute en script et si vous voyez la moindre anomalie (je ne l'ai pas encore testé ce script tel quel mais au travers des tests que j'ai pu faire sur ma propre config ça passe nickel) ou un moyen de faire mieux je suis très preneur! J'ai envie de m'y mettre au scripting on peut faire plein de trucs vraiment pratiques!
 
Merci et j'attends vos commentaires...

Reply

Marsh Posté le 18-03-2008 à 10:59:11    

errolevel renvois 0 si ok

C:\>net use \\xxxxxx
La commande s'est terminée correctement.
 
C:\>echo %ERRORLEVEL%
0
 
C:\>net use \\machine_eteinte
L'erreur système 53 s'est produite.
Le chemin réseau n'a pas été trouvé.
 
C:\>echo %ERRORLEVEL%
2


-il ne faut pas exécuter robocopy si errolevel est différent de 0
-les @ partout alourdissent le code du batch qui déjà à la base n'est pas très lisible.
-tu peux aussi utiliser des arguments lors de l'appel de ton script afin de ne pas avoir à le réécrire pour chaque poste.
de cette manière ton script peut s'appeler dans le planificateur de tâche : script.cmd password login
 

@echo off
net use P: \\portable\partage$ %1 /USER:%2
if not errorlevel 0 goto fin
ROBOCOPY "P:" "F:\_DATA" /MIR /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB /R:3 /W:1  
fin:

Reply

Marsh Posté le 18-03-2008 à 18:25:55    

djobidjoba je te remercie beaucoup d'avoir pris le temps de me conseiller comme ça. Je progresse grâce à ces conseils.
 
J'ai fait plusieurs tests aujourd'hui... Le problème de mon script (celui avant ta dernière réponse) c'est que si le chemin réseau est trouvé il interprète le "@EXIT" de la 4ème ligne... donc la ligne qui m'intéresse, la 5ème, n'est pas exécutée même si le chemin réseau est trouvé... c'est balot !
Si je place ":exit" (3ème ligne) puis "@EXIT" (4ème ligne) après "@ROBOCOPY" il m'exécute quand même Robocopy même si le chemin réseau est introuvable... c'est balot aussi !
 
Ton script a l'air nickel et puis le coup des variables "%1" et "%2" pour passer des arguments au moment de l'appel du fichier ça me  plait bien.
 
Merci encore à toi!

Reply

Marsh Posté le 20-03-2008 à 10:12:00    

Bonjour,
 
Je me permets de revenir sur le script... il y a quelque chose qui m'échappe.
 
@echo off  
net use P: \\portable\partage$ %1 /USER:%2  
if not errorlevel 0 goto fin  
ROBOCOPY "P:" "F:\_DATA" /MIR /V /NP /LOG+:"F:\RobocopyLOG.txt" /ZB /R:3 /W:1  
:fin
 
On est d'accord que le code erreur renvoyé lorsque le chemin réseau est introuvable est différent de 0
donc "if not errorlevel 0 goto fin" veut bien dire "si le code erreur n'est pas 0 aller à la fin" et normalement il zappe la ligne lançant robocopy pour aller direct a la ligne ":fin".
 
J'ai fait un test tout bête avec le script suivant :
 
@echo off
net use P: \\portable\partage$
if not errorlevel 0 goto fin
WINVER
:fin
pause
 
C'est le même script que celui plus haut avec "WINVER" à la place de "ROBOCOPY" mais le comportement du script doit être le même... le "pause" de la fin c'est juste pour voir ce qui se passe dans la fenêtre DOS.
Le chemin réseau est introuvable donc code différent de 0 il devrait normalement aller à "pause" directement sans interpréter la ligne "WINVER"... ce n'est pas le cas g la boite de la version Windows qui s'affiche systématiquement même si le chemin réseau "\portable\partage$" est introuvable... je capte pas ???

Reply

Sujets relatifs:

Leave a Replay

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