Batch pour sauvegardes auto +insérer la date dans le nom du répertoire

Batch pour sauvegardes auto +insérer la date dans le nom du répertoire - Shell/Batch - Programmation

Marsh Posté le 16-02-2010 à 11:15:42    

Bonjour,
 
ma question est sûrement très simple.. mais je suis un petit nouveau dans la programmation batch...
 
Je voudrais effectuer une copie de 2 dossiers présents sur un disque dur portable vers mon PC.
Comme je dois faire ça tous les soirs avant de partir du boulot, je pensais utiliser un batch..
 
Je cherche donc comment faire pour:
- copier un dossier (F:\docs de travail par ex) vers un autre emplacement de destination.
- créer un dossier de destination différent chaque jour avec la date, qqchose du style "sauvegarde_2010-02-16"
 
 
Au final j'auraias le dossier "docs de travail" copié vers sauv_2010-02-16 le 16 février, sauv_2010-02-17 le 17 février.....
 
Merci bcp pour votre aide !!
 
Cyril


Message édité par tiftif le 18-02-2010 à 10:00:38

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 16-02-2010 à 11:15:42   

Reply

Marsh Posté le 16-02-2010 à 21:48:02    

je te conseille plutot l'utilitaire de krosoft synctoy bcp plus puissant..
http://www.microsoft.com/downloads [...] laylang=en

Reply

Marsh Posté le 16-02-2010 à 23:23:05    

Ok merci, je vais jeter un oeil...
Mais comme je voudrais copier ces données sur un PC du boulot, ou je n'ai pas de droits d'admin pour installer SyncToy, j'aurais préféré faire un batch...


Message édité par tiftif le 16-02-2010 à 23:23:32

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 11:16:17    

tu as une ip fixe sur ton pc de maison?

 

avec un

 


net use Y: \\ip_maison\c$ user:/nom_domaine\login mdp <-- te log sur ton disque c: de ton pc maison
MKDIR \\ip_maison\C$\docs_travail_sauvegarde\ <-creer ton dossier de sauvegarde
xcopy /s F:\docs_de_travail \\ip_maison\C$\docs_travail_sauvegarde\ <- copie ton repertoire docs_de_travail dans le dossier docs_travail_sauvegarde sur ton pc_maison
net use Y: /delete <- ferme la connexion

 

Il te suffit après de copier directement tes dossier  docs_travail_sauvegarde  par un simple xcopy (xcopy :s F:\docs_de_travail \\ip_maison\C$\docs_travail_sauvegarde\)
sauf que dans ce cas ton dossier s'appelera docs_de_travail. Il suffira de modifier le nom chez toi ou alors tu completes ton script pour faire le changement automatiquement en batch.

 

j'ai fait comme cela pour la création de dossier sur des machines a distance et cela marche tres bien. Ton pc distant doit juste accepter les connexions entrantes et tu dois (en principe) etre loggué en tant qu'admin

 

Dis moi si je fais erreur ou non


Message édité par shikra le 17-02-2010 à 11:18:09
Reply

Marsh Posté le 17-02-2010 à 11:43:12    

Dans ce cas un xcopy le ferait bien :
set dat=%date:~6,4%%date:~3,2%%date:~0,2%
xcopy "f:\docs de travail" "i:\sauvegarde_%dat%\*.*" /D /E /Y

Reply

Marsh Posté le 17-02-2010 à 12:25:22    

merci pour les infos.
en fait je ne pensais pas faire de sauvegarde a distance.
de plus nos accès vers le "monde extérieur" sont super protégés depuis le boulot et je ne suis pas sur de pouvoir accéder à mon pc a distance.
(sans parler du fait que mon portable maison est plutot vieux et j'évite de la faire tourner 24/24.. compliqué hein ?? :)
 
Je visais donc plus de faire la copie en local "tout bêtement" :)
(de mon disque externe vers un lecteur de réseau et vers le DD de mon portable de bureau au taff puis sur le perso quand je rentre)
 
Et comme je ne connais pas trop les commandes de batch je ne sais pas ce qui est faisable.
 
 
Shikra.. d'après ton mail j'en déduis qu'il n'est pas possible d'insérer un élément de date dans un nom de fichier avec un batch ?
 
[edit] merci monghost pour ton post.. le "set dat=%date:~6,4%%date:~3,2%%date:~0,2%".. ca reviens à créer une variable "dat" ? à quoi correspondent les 6.4, 3.2.... ?


Message édité par tiftif le 17-02-2010 à 12:28:00

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 12:29:05    

ok autant pour moi je pensais que tu voulais faire ca sur ton pc chez toi

 

la commande de monghost te conviendra parfaitement alors

 


edit: cela est largement faisable monghost mais je ne m'etais pas attardé dessus en premier


Message édité par shikra le 17-02-2010 à 12:30:43
Reply

Marsh Posté le 17-02-2010 à 12:36:19    

c'est vrai que je n'ai peut être pas été assez clair ;)
mais je garde ça en tête, ça peut tjs être utile.. !
 
une autre petite question... sur mon fixe du taff, suivant si je mets une clé usb avant, la lettre de lecteur du disque externe n'est jamais la même... il y a til moyen de faire une commande de copie indépendante de la lettre de lecteur (sur mon portable j'ai les accès admin et je l'ai assigné en tant que disque X et donc pas de pb)


Message édité par tiftif le 17-02-2010 à 12:38:42

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 12:41:47    

euuh je ne sais pas si c'est faisable mais regarde si tu ne peux pas faire cela en passant par l'adresse mac de ta cle usb ou de ton dd^^

Reply

Marsh Posté le 17-02-2010 à 12:54:37    

héhé je regarderai :)
 
je veins de faire un test de xcopy avec

Code :
  1. @ECHO OFF
  2. xcopy "F:\test\trucs et" "F:\test\copie" /s /e


 
petit souci: il me demande a chaque fois "est-ce que F:\test\copie spécifie un nom de fichier ou un nom de répertoire de destination".
il faut répondre f pour fichier et r pour répertoire sans taper entrer puis la copie se fait parfaitement.
il y a til moyen d'insérer la réponse dans le batch ?
 
 
edit: je viens de teste la date..

Code :
  1. set dat=%date:~6,4%%date:~3,2%%date:~0,2%
  2. mkdir "F:\test\test_%dat%"


... et il me crée un dossier nommé "test_7" :'(
une idée d'ou viens l'erreur ??


Message édité par tiftif le 17-02-2010 à 13:06:43

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 12:54:37   

Reply

Marsh Posté le 17-02-2010 à 14:37:54    

oui, tu dois préciser les fichiers que tu veux copier :
F:\test\test_%dat%\*.*

Reply

Marsh Posté le 17-02-2010 à 15:28:03    

ok cool merci ! je n'ai plus à taper "r" :)
 
Sinon pour le souci de date... une idée ?


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 15:54:27    

c'est lié au fait que tu ne précisais pas les fichiers, il décompose la date en sous repertoire.

Reply

Marsh Posté le 17-02-2010 à 16:54:33    

Je suis dsl, mais je ne comprends pas trop le "il décompose la date en sous repertoire".
Je viens de refaire un essai mais il m'affiche toujours le "7".. :'(


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 17-02-2010 à 17:41:07    

ok, mais si tu fais un xcopy, tu n'as pas besoin de faire un  mkdir, il te crée automatiquement le repertoire avec l'option /E

Reply

Marsh Posté le 17-02-2010 à 17:52:28    

Ok, en fait je cherchais à tester les différentes fonctions séparément. d'un côté la copie avec xcopy et de l'autre la création d'un repertoire avec la date dedans.
 
Au final en utilisant seulement set dat et mkdir je n'arrive pas à renomer mon fichier en y insérant la date...
idem quand je teste les 2 lignes suivantes:

Code :
  1. set dat=%date:~6,4%-%date:~3,2%-%date:~0,2%
  2. xcopy "F:\test\trucs" "F:\test\copie_%dat%\*.*" /s /e


j'ai quand même un dossier "copie_7" qui apparait, et toujours pas de date...


Message édité par tiftif le 18-02-2010 à 10:02:00

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 18-02-2010 à 10:01:34    

Aujourdhui j'ai "copie_8"... ça varie donc bien en fonction de la date :)
...mais pas vraiment le résultat espéré.


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 18-02-2010 à 10:56:44    

alors là.... je viens de tester ton code, ça me fait bien un dossier comme il faut....
est ce que tu le lances à partir d'un fichier.bat ou directement à partir de la console ?

Reply

Marsh Posté le 18-02-2010 à 11:10:23    

bah... a partir d'un fichier .bat.. :)
 
Je viens de tester ça et ça veins de tomber en marche !! ;)

Code :
  1. set dat=%Date:~-4%_%Date:~-7,-5%_%Date:~-10,-8%
  2. rem mkdir "F:\test\SAUV_%dat%"
  3. xcopy "F:\test\trucs a sauver" "F:\test\SAUV_%dat%\*.*" /s /e /h /Y /q

... et là, ca fonctionne !
 
Ca a l'air de venir des chiffres :~-4 et compagnie.. ça signifie quoi ?
(pas du tout compris comment ça marche...)
Ca ne dépendrais pas de l'OS par hazard ?? (je suis sous windows 2000 SP4)


Message édité par tiftif le 18-02-2010 à 11:14:18

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 18-02-2010 à 11:14:50    

moi je l'ai testé directement à partir de la console. mais tu as raison ça vient peut-être de ton OS...
les ~6,4% précise la partie de la variable date que tu veux : à partir du 6ème caractère retourne 4 caractères.

Reply

Marsh Posté le 18-02-2010 à 11:34:23    

ah...... okok je comprends mieux :)


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 18-02-2010 à 11:37:32    

donc après tu peux jouer avec ça pour mettre en forme comme tu veux :D

Reply

Marsh Posté le 18-02-2010 à 12:32:09    

carément !
 
D'ailleurs tant que je te tiens...
je voudrais proposer un choix genre taper 1 pour une copie sur le PC portable, 2 pour une copie sur le fixe... (car a chaque fos le dossier de destination change un peu, et la lettre de mon disque externe n'est pas la même)
 
j'ai fait un ruc de ce style

Code :
  1. :choice
  2. echo Ou faire la savudegarde ?
  3. set /P choix=[1,2]
  4. if "%choix%"=="1" goto oui
  5. if "%choix%"=="2" goto non
  6. echo Choix invalide !
  7. echo.
  8. goto choice


 
ça marche bien, mais je voudrais pouvoir faire une "mise en page" plus propre en disant "1 pour le portable, 2 pour..."
c'est possible d'intégrer ça dans le set choix ??
avec éventuellement la possibilité de pouvoir rentrer la lettre de lecteur de destination style "x" puis de l'insérer dans le chemin pré établi avec la lettre de lecteur comme variable.. (je sais pas si c'est clair :))


Message édité par tiftif le 18-02-2010 à 12:36:36

---------------
Page flick r -- Feedback
Reply

Marsh Posté le 18-02-2010 à 13:45:00    

echo Ou faire la savudegarde taper 1 pour le portable, 2 pour soutenir Mickael Vendetta ?
:D
ça t'irait pas ?

Reply

Marsh Posté le 18-02-2010 à 13:53:40    

c'est pas faux... :)


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 19-02-2010 à 09:34:57    

Petite question sur le xcopy.. j'ai de gros fichiers à copier, et ça prends un peu de temps...
J'utilise l'option /Q pour ne pas afficher les noms de fichiers lors de la copie, mais est-il possible d'afficher qqchose pour montrer que la copie avance ?
Genre des "...." ou autre ?
 
(histoire d'être sûr que ça n'a pas planté ;))
 
Merci !


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 19-02-2010 à 15:28:25    

aucune idee. desole

Reply

Marsh Posté le 19-02-2010 à 15:57:58    

Ok, je vais continuer a chercher.. même si c'est pas super important ;)
 
Mes sauvegardes se font nikel maintenant, merci pour le coup de main !


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 19-02-2010 à 16:00:42    

si tu désires faire la barre de progression en fonction del l'avancement reel de la copie de ton fichier, cela n'est pas possible.
 
Apres tu peux toujours créer une fake barre mais qui ne tiendra pas compte du % de progression de ta copie.

Reply

Marsh Posté le 19-02-2010 à 16:56:43    

c'était pas forcément une barre... surtout que sous dos ca doit être difficile
mais plutot des petits points qui avancent ou clignottent... peu importe si ce n'est pas le %réel...
 
tu ferais comment ?


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 24-02-2010 à 10:36:16    

tiftif a écrit :

Petite question sur le xcopy.. j'ai de gros fichiers à copier, et ça prends un peu de temps...
J'utilise l'option /Q pour ne pas afficher les noms de fichiers lors de la copie, mais est-il possible d'afficher qqchose pour montrer que la copie avance ?
Genre des "...." ou autre ?
 
(histoire d'être sûr que ça n'a pas planté ;))
 
Merci !


 
Ben euh.... Sous Ninix y a bien la commande echo avec un ch'tit \c qui laisse le prompt à la fin de la ligne (en fait il affiche la commande sur la sortie standard mais ne l'exécute pas, donc pas de retour chariot à la ligne). ça donne un truc du genre :

Code :
  1. echo ".\c"


 
Que tu mets dans ta boucle de traitement des fichiers : à chaque passage, il va afficher un point sans retourner  à la ligne, visuellement tu vas avoir un ligne de points qui va 'avancer'. Petite feinte classique que j'utilise souvent pour faire plaisir au client qui 'voit son travail progresser'  :sol: Seul bémol : on ne sait pas quand la ligne de points est sensées se terminer !  :(  Mais bon, rien n'est parfait dans ce bas monde...
 
Oublie pas quand tu sors de la boucle un bon petit echo tout seul histoire de finir la ligne et de continuer proprement (sinon la prochaine ligne sera affichée après le dernier point, moche  :non: )
 
Maintenant transmis sous DOS et affichage dans un xterm windaube euh.... jamais testé  :whistle: à voir ?
 
Voili voilouh


Message édité par Kerrozen le 24-02-2010 à 10:38:32

---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Marsh Posté le 24-02-2010 à 10:42:17    

Merci pour ta réponse.
en fait je copie des répertoires... 2 pour être précis. et c'est à l'intérieur du deuxième entre autres que j'ai tout plein de rgos fichiers (dont les noms sont inconnus à l'avance, ils changent tous les jours)
 
donc ta solution va être difficile à implémenter... mais je garde en tête l'astuce !! :)


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 24-02-2010 à 10:59:20    

tiftif a écrit :

Merci pour ta réponse.
en fait je copie des répertoires... 2 pour être précis. et c'est à l'intérieur du deuxième entre autres que j'ai tout plein de rgos fichiers (dont les noms sont inconnus à l'avance, ils changent tous les jours)
 
donc ta solution va être difficile à implémenter... mais je garde en tête l'astuce !! :)


 
Bah euh ... pas forcement si difficile que ça ? Tu décortiques la copie et tu planques tes echo dedans :
 

Code :
  1. for fic in $( ls REP_SOURCE/* )               /* exéction pour chaque fichier du répertoire source */
  2. do
  3.    cp ${fic} REP_CIBLE/                       /* faire la copie du fichier */
  4.    echo ".\c"                                 /* faire 'avancer' la barre de progression */
  5. done
  6. echo                                          /* Traitement terminé => petit saut de ligne pour faire propre et affichage d'un message de fin */
  7. echo "Copie terminee !"


---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Marsh Posté le 24-02-2010 à 11:07:50    

Hum... je vais essayer ce soir :)
J'ai pigé la logique globale, mais comme j'aime bien comprendre pourquoi et comment qqchose marche j'aurais brsoin de tes lumières sur les lignes :
 
1. tu dis de faire qqchose pour chaque fichier du répertoire source c'est ça ?
dans mon cas je change REP_SOURCE par "D:\..." ? Je garde le reste ? (fic in...? ce sont des commandes connues par dos ?
 
3. cp : je laisse cp ou je remet mon xcopy ?
 
pas très bien saisis l'utilisation du $ lignes 1 et 3..
 
merci !


---------------
Page flick r -- Feedback
Reply

Marsh Posté le 24-02-2010 à 11:12:32    

Arf...... souci majeur de traduction, excuse-moi : le code que je t'ai mis est un code pour du KSH sous Unix......  :cry:  
 
Il te faut traduire avec tes fonctions Batch dos et là, malheureusement je suis nettement moins compétent.
 
D'ailleurs je ne sais même pas si le Batch Dos va reconnaître le " \c " dans le echo ?
 
Question à poser à un pro du Batch.
 
Désolé sinon. Mais je pense qu'il doit bien y avoir un équivalent, car Batch windows et shell sont quand même assez ressemblants.
 
Google peut-être ton ami ?  :whistle:


Message édité par Kerrozen le 24-02-2010 à 11:14:04

---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Marsh Posté le 24-02-2010 à 11:16:05    

je vais tenter de chercher ça..... mais merci quand même pour la philo de la manip à faire :)


---------------
Page flick r -- Feedback
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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