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.
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
"Méta-MCI" <enleverlesX.XmcX@XmclaveauX.com> wrote in message
news:e1ShZXnhGHA.4304@TK2MSFTNGP05.phx.gbl...
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
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. ;-)
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
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.)
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.)
::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.)