OVH Cloud OVH Cloud

Copie et renommage

22 réponses
Avatar
Luc Grangier
Bonjour,

J'aimerais en vbs copier un fichier à intervalle régulier vers un autre
répertoire en le renommant à chaque fois différemment pour éviter d'écraser
la copie précédente, afin d'avoir uen liste de fichiers de sauvegarde et non
1 seul fichier de sauvegarde.

Quelqu'un peut m'aider??
Merci d'avance

2 réponses

1 2 3
Avatar
Jacques Barathon [MS]
"Méta-MCI" wrote in message
news:
Bonsoir !


J'arrive après la bataille (la faute à la Belgique et à ses travaux
perpétuels sur les autoroutes).


Ils ont bon dos les Belges :-)

Mais, voici une version Batch :

::copie-reguliere.bat fichier intervalle heure_de_fin
@echo off
setlocal
set /Anum00
:LOOP
set /Anum=num+1
sleepm %2000
copy %1 C:SAUVEFICHIER.%num:~1,3% /Y >null
if /I %time% LSS %3 goto :LOOP
endlocal


Utilisation :
copie-reguliere "fichier a.copier" 60 20:30

Cela copiera le fichier "fichier a.copier" (guillemets car espace) toutes
les 60 secondes, et jusqu'à 20h.30
La copie sera faite dans C:SAUVE sous les noms FICHIER.001 FICHIER.002
FICHIER.003 etc.

Évidemment, c'est moins compliqué qu'en PowerShell ; mais, dans le sud, on
préfère les choses simples et pragmatiques ;-))


Hormis le fait que mon XP ne connaît pas la commande sleepm, le script a
l'air super, mais il n'est pas fonctionnellement équivalent au script
PowerShell que j'ai publié. Notamment, il ne copie qu'un fichier, écrase son
extension et ne propose qu'un incrément en postfixe pour différentier les
copies.

Quoi qu'il en soit, bien sûr qu'il existe de nombreuses solutions qui n'ont
pas besoin de faire appel à PowerShell. Simplement, ton script montre à la
fois la beauté du langage batch et ses limites. Par exemple, pour éviter de
complexifier ton script, tu as remplacé la date par un incrément (ce qui au
passage peut être plus pratique, je le note comme une option possible à
rajouter au script PowerShell). Si tu avais dû gérer l'ajout de la date et
de l'heure au nom des fichiers en laissant à l'utilisateur le choix non pas
dans la date mais dans son format, il t'aurait fallu multiplier les lignes
de code. Mais je te laisse démontrer que j'ai tort. ;-)

Jacques

Avatar
Méta-MCI
Bonjour !

Mais je te laisse démontrer que j'ai tort. ;-)




C'EST DE LA PROVOCATION DELIBEREE ! ! !


Mais, j'ai fait une petite modif :

::copie-reguliere.bat fichier intervalle heure_de_fin
@echo off
setlocal
md C:DEVBATSAUVE
set /Anum00
:LOOP
set /Anum=num+1
sleepm %2000
xcopy %1
"C:DEVBATSAUVE%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%time:~0,2%%time:~3,2%_%num:~1,3%.*"
/Y
if /I %time% LSS %3 goto :LOOP
endlocal


Exemple d'utilisation :
copie-reguliere.bat fichiersacopier.* 30 10:30


Avec la modif :
- y'a la date AAAAMMJJ au début
- y'a l'heure HHMM ensuite
- y'a toujours l'incrément
- l'extension est préservée
- on peut envoyer plusieurs fichiers, s'ils ont des extensions différentes

Pour sleepm : http://www.ponx.org/batutils



@-salutations

Michel Claveau




PS : dans Ponx, j'ai une fonction intéressante : "survfile" ;
exemple d'utilisation :
survfile(r'c:datafichier.pdf', 3, 3600, r'c:sauvefichier.bak',
'copie')
Surveille, en tâche de fond, le fichier 'c:datafichier.pdf', durant une
heure ; dès qu'il est âgé de moins de 3 secondes, il le copie.
L'aspect intéressant, c'est que, à la place de la copie, survfile peut
appeler n'importe quelle fonction en callback (compression, destruction,
envoi par email, impression, etc.)



1 2 3