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.
Tout à fait. D'ailleurs, c'était ma première version, j'ai introduit la variable $now pour faire un peu moins ésotérique.
Je n'ai pas le temps maintenant, mais une v2 pourrait inclure le nom du fichier original en plus de la date et heure courante, par exemple:
macaveavin20060526_223500.mdb
Ce qui permettrait de faire une v3 qui accepterait plusieurs fichiers en entrée: copy-file.ps1 -source *.mdb -dest c:backups -i 3600
Jean, si tu as 5 minutes, sinon je m'y colle demain matin :-)
Jacques
Jean
Tout à fait. D'ailleurs, c'était ma première version, j'ai introduit la variable $now pour faire un peu moins ésotérique.
Je n'ai pas le temps maintenant, mais une v2 pourrait inclure le nom du fichier original en plus de la date et heure courante, par exemple:
macaveavin20060526_223500.mdb
Je me demande si 20060526_223500macaveavins.mdb ne serait pas plus agréable à consulter dans l'explorateur (c'est plus simple à mettre en place aussi).
Ce qui permettrait de faire une v3 qui accepterait plusieurs fichiers en entrée: copy-file.ps1 -source *.mdb -dest c:backups -i 3600
J'aime assez cette idée de fichiers multiples :-)
Jean, si tu as 5 minutes, sinon je m'y colle demain matin :-)
Il faudra certainement vous y coller encore mais voici mes 5 eurocents :-) :
# ---8<--- # copy-file.ps1 # # copie un même fichier à intervalles réguliers # en lui donnant la date et l'heure pour nouveau nom # # paramètres: # # source - chemin complet vers le fichier à copier # destination - répertoire de destination # interval - intervalle entre 2 copies (en secondes)
param ( [string]$source = $(throw "Et le fichier source?"), [string]$destination = $(throw "Et la destination?"), [int32]$interval = $(throw "Et l'intervalle en s.??") )
Tout à fait. D'ailleurs, c'était ma première version, j'ai introduit la
variable $now pour faire un peu moins ésotérique.
Je n'ai pas le temps maintenant, mais une v2 pourrait inclure le nom du
fichier original en plus de la date et heure courante, par exemple:
macaveavin20060526_223500.mdb
Je me demande si 20060526_223500macaveavins.mdb ne serait pas plus
agréable à consulter dans l'explorateur (c'est plus simple à mettre en
place aussi).
Ce qui permettrait de faire une v3 qui accepterait plusieurs fichiers en
entrée:
copy-file.ps1 -source *.mdb -dest c:backups -i 3600
J'aime assez cette idée de fichiers multiples :-)
Jean, si tu as 5 minutes, sinon je m'y colle demain matin :-)
Il faudra certainement vous y coller encore mais voici mes 5 eurocents
:-) :
# ---8<---
# copy-file.ps1
#
# copie un même fichier à intervalles réguliers
# en lui donnant la date et l'heure pour nouveau nom
#
# paramètres:
#
# source - chemin complet vers le fichier à copier
# destination - répertoire de destination
# interval - intervalle entre 2 copies (en secondes)
param (
[string]$source = $(throw "Et le fichier source?"),
[string]$destination = $(throw "Et la destination?"),
[int32]$interval = $(throw "Et l'intervalle en s.??")
)
Tout à fait. D'ailleurs, c'était ma première version, j'ai introduit la variable $now pour faire un peu moins ésotérique.
Je n'ai pas le temps maintenant, mais une v2 pourrait inclure le nom du fichier original en plus de la date et heure courante, par exemple:
macaveavin20060526_223500.mdb
Je me demande si 20060526_223500macaveavins.mdb ne serait pas plus agréable à consulter dans l'explorateur (c'est plus simple à mettre en place aussi).
Ce qui permettrait de faire une v3 qui accepterait plusieurs fichiers en entrée: copy-file.ps1 -source *.mdb -dest c:backups -i 3600
J'aime assez cette idée de fichiers multiples :-)
Jean, si tu as 5 minutes, sinon je m'y colle demain matin :-)
Il faudra certainement vous y coller encore mais voici mes 5 eurocents :-) :
# ---8<--- # copy-file.ps1 # # copie un même fichier à intervalles réguliers # en lui donnant la date et l'heure pour nouveau nom # # paramètres: # # source - chemin complet vers le fichier à copier # destination - répertoire de destination # interval - intervalle entre 2 copies (en secondes)
param ( [string]$source = $(throw "Et le fichier source?"), [string]$destination = $(throw "Et la destination?"), [int32]$interval = $(throw "Et l'intervalle en s.??") )
J'ai juste supprimé les variables intermédiaires en regroupant la concaténation du nouveau nom au moment de la copie.
C'est moins chipo en effet.
Version avec format paramétrable plus tard ce week-end si le temps est à la pluie :-)
Entre 2 rayons de soleil j'ai ajouté un paramètre facultatif qui permet d'arrêter automatiquement après x secondes.
(new-timespan $starttime).TotalSeconds
pourrait être "remplacé" par
((get-date)-$starttime).TotalSeconds
# ---8<--- # copy-file.ps1 # # copie une sélecion de fichiers à intervalles réguliers # les copies portent date et heure en préfixe # # paramètres: # # source - chemin complet vers le fichier à copier # destination - répertoire de destination # interval - intervalle entre 2 copies (en secondes)
param ( [string]$source = $(throw "Et les fichiers source?"), [string]$destination = $(throw "Et le répertoire de destination?"), [int32]$interval = $(throw "Et l'intervalle en s.??"), [int32]$exitafter # optionnel : quitter après x secondes )
J'ai juste supprimé les variables intermédiaires en regroupant la
concaténation du nouveau nom au moment de la copie.
C'est moins chipo en effet.
Version avec format paramétrable plus tard ce week-end si le temps est à la
pluie :-)
Entre 2 rayons de soleil j'ai ajouté un paramètre facultatif qui permet
d'arrêter automatiquement après x secondes.
(new-timespan $starttime).TotalSeconds
pourrait être "remplacé" par
((get-date)-$starttime).TotalSeconds
# ---8<---
# copy-file.ps1
#
# copie une sélecion de fichiers à intervalles réguliers
# les copies portent date et heure en préfixe
#
# paramètres:
#
# source - chemin complet vers le fichier à copier
# destination - répertoire de destination
# interval - intervalle entre 2 copies (en secondes)
param (
[string]$source = $(throw "Et les fichiers source?"),
[string]$destination = $(throw "Et le répertoire de destination?"),
[int32]$interval = $(throw "Et l'intervalle en s.??"),
[int32]$exitafter # optionnel : quitter après x secondes
)
J'ai juste supprimé les variables intermédiaires en regroupant la concaténation du nouveau nom au moment de la copie.
C'est moins chipo en effet.
Version avec format paramétrable plus tard ce week-end si le temps est à la pluie :-)
Entre 2 rayons de soleil j'ai ajouté un paramètre facultatif qui permet d'arrêter automatiquement après x secondes.
(new-timespan $starttime).TotalSeconds
pourrait être "remplacé" par
((get-date)-$starttime).TotalSeconds
# ---8<--- # copy-file.ps1 # # copie une sélecion de fichiers à intervalles réguliers # les copies portent date et heure en préfixe # # paramètres: # # source - chemin complet vers le fichier à copier # destination - répertoire de destination # interval - intervalle entre 2 copies (en secondes)
param ( [string]$source = $(throw "Et les fichiers source?"), [string]$destination = $(throw "Et le répertoire de destination?"), [int32]$interval = $(throw "Et l'intervalle en s.??"), [int32]$exitafter # optionnel : quitter après x secondes )
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 ;-))
Michel Claveau
Bonsoir !
J'arrive après la bataille (la faute à la Belgique et à ses travaux
perpétuels sur les autoroutes).
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 ;-))
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 ;-))
Michel Claveau
Méta-MCI
Re !
Une alternative intéressante serait d'utiliser robocopy.
Exemple : c:robocopy . C:SAUVE "fichier a copier.txt" FICHIER.BAK /MON:1 /MOT:1
Copiera le fichier, mais seulement s'il a changé. Un test est faite à chaque minute (/MOT:1). Ici aussi, il faudra arrêter par Ctrl-C
Bon, l'exemple est simpliste. Mais, rien n'interdit d'extrapoler.
@-salutations
Michel Claveau
Re !
Une alternative intéressante serait d'utiliser robocopy.
Exemple :
c:robocopy . C:SAUVE "fichier a copier.txt" FICHIER.BAK /MON:1
/MOT:1
Copiera le fichier, mais seulement s'il a changé. Un test est faite à chaque
minute (/MOT:1). Ici aussi, il faudra arrêter par Ctrl-C
Bon, l'exemple est simpliste. Mais, rien n'interdit d'extrapoler.