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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1966430
tiftif
Posté le 16-02-2010 à 11:15:42  profilanswer
 

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
mood
Publicité
Posté le 16-02-2010 à 11:15:42  profilanswer
 

n°1966637
MonGhost
Ite missa est
Posté le 16-02-2010 à 21:48:02  profilanswer
 

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

n°1966671
tiftif
Posté le 16-02-2010 à 23:23:05  profilanswer
 

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
n°1966787
shikra
life is short,drink faster!!!
Posté le 17-02-2010 à 11:16:17  profilanswer
 

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
n°1966804
MonGhost
Ite missa est
Posté le 17-02-2010 à 11:43:12  profilanswer
 

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

n°1966840
tiftif
Posté le 17-02-2010 à 12:25:22  profilanswer
 

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
n°1966842
shikra
life is short,drink faster!!!
Posté le 17-02-2010 à 12:29:05  profilanswer
 

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
n°1966844
tiftif
Posté le 17-02-2010 à 12:36:19  profilanswer
 

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
n°1966848
shikra
life is short,drink faster!!!
Posté le 17-02-2010 à 12:41:47  profilanswer
 

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^^

n°1966854
tiftif
Posté le 17-02-2010 à 12:54:37  profilanswer
 

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
mood
Publicité
Posté le 17-02-2010 à 12:54:37  profilanswer
 

n°1966900
MonGhost
Ite missa est
Posté le 17-02-2010 à 14:37:54  profilanswer
 

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

n°1966932
tiftif
Posté le 17-02-2010 à 15:28:03  profilanswer
 

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


---------------
Page flick r -- Feedback
n°1966939
MonGhost
Ite missa est
Posté le 17-02-2010 à 15:54:27  profilanswer
 

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

n°1966951
tiftif
Posté le 17-02-2010 à 16:54:33  profilanswer
 

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
n°1966964
MonGhost
Ite missa est
Posté le 17-02-2010 à 17:41:07  profilanswer
 

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

n°1966967
tiftif
Posté le 17-02-2010 à 17:52:28  profilanswer
 

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
n°1967089
tiftif
Posté le 18-02-2010 à 10:01:34  profilanswer
 

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
n°1967124
MonGhost
Ite missa est
Posté le 18-02-2010 à 10:56:44  profilanswer
 

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 ?

n°1967131
tiftif
Posté le 18-02-2010 à 11:10:23  profilanswer
 

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
n°1967135
MonGhost
Ite missa est
Posté le 18-02-2010 à 11:14:50  profilanswer
 

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.

n°1967147
tiftif
Posté le 18-02-2010 à 11:34:23  profilanswer
 

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


---------------
Page flick r -- Feedback
n°1967150
MonGhost
Ite missa est
Posté le 18-02-2010 à 11:37:32  profilanswer
 

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

n°1967178
tiftif
Posté le 18-02-2010 à 12:32:09  profilanswer
 

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
n°1967197
MonGhost
Ite missa est
Posté le 18-02-2010 à 13:45:00  profilanswer
 

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

n°1967203
tiftif
Posté le 18-02-2010 à 13:53:40  profilanswer
 

c'est pas faux... :)


---------------
Page flick r -- Feedback
n°1967452
tiftif
Posté le 19-02-2010 à 09:34:57  profilanswer
 

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
n°1967625
MonGhost
Ite missa est
Posté le 19-02-2010 à 15:28:25  profilanswer
 

aucune idee. desole

n°1967640
tiftif
Posté le 19-02-2010 à 15:57:58  profilanswer
 

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
n°1967642
shikra
life is short,drink faster!!!
Posté le 19-02-2010 à 16:00:42  profilanswer
 

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.

n°1967678
tiftif
Posté le 19-02-2010 à 16:56:43  profilanswer
 

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
n°1968790
Kerrozen
To be or not to be ... cool ..
Posté le 24-02-2010 à 10:36:16  profilanswer
 

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 !
n°1968791
tiftif
Posté le 24-02-2010 à 10:42:17  profilanswer
 

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
n°1968801
Kerrozen
To be or not to be ... cool ..
Posté le 24-02-2010 à 10:59:20  profilanswer
 

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 !
n°1968807
tiftif
Posté le 24-02-2010 à 11:07:50  profilanswer
 

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
n°1968812
Kerrozen
To be or not to be ... cool ..
Posté le 24-02-2010 à 11:12:32  profilanswer
 

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 !
n°1968816
tiftif
Posté le 24-02-2010 à 11:16:05  profilanswer
 

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


---------------
Page flick r -- Feedback
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Batch - Variable d'environnementinsérer image dans un fichier php
requête sur une date[Résolu] Batch to C
[oracle] Requete avec filtre sur une dateExcel calcul sur date en VBA
[Batch] Extraire dans un nom complet de fichier UNC le nom du fichier[BATCH]Ping avec variable
Aller à la fin d'une chaîne et insérer un ou plusieurs caractères[Batch] Transformation des fichiers
Plus de sujets relatifs à : Batch pour sauvegardes auto +insérer la date dans le nom du répertoire


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