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

10 réponses

1 2 3
Avatar
jbongran
Luc Grangier wrote:
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


Quelque chose come ça ?

Option Explicit
Dim pause ' Temps de pause entre deux copies (en secondes)
Dim strSourceFile ' Chemin complet du fichier source
Dim strDestRep ' Chemin complet du repertoire destination (fini par un "/")
pause = 60 ' 1 minute
strSourceFile = "c:ftp.txt"
strDestRep = "D:test"

'Pas besoin d'editer ci-dessous

Function PauseScript()
WScript.Sleep pause * 1000
Call Copy()
End Function

Function GenerateNewName()
Dim strDate, tmp
strDate = Now()
tmp = Year(strDate)
tmp = tmp & Right("0" & Month(strDate), 2)
tmp = tmp & Right("0" & Day(strDate), 2)
tmp = tmp & "_" & Right("0" & Hour(strDate), 2)
tmp = tmp & Right("0" & Minute(strDate), 2)
tmp = tmp & Right("0" & Second(strDate), 2)
GenerateNewName = tmp
End Function

Function Copy()
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(strSourceFile) Then
Dim f, strFileName, strStartName, strExtension, intPosExt
Set f = fso.GetFile(strSourceFile)
strFileName = f.Name
intPosExt = InStrRev(strFileName, ".")
strStartName = Left(strFileName, intPosExt-1)
strExtension = Right(strFileName, Len(strFileName) - intPosExt+1)
strFileName = strDestRep & strStartName & "_" & GenerateNewName &
strExtension
fso.CopyFile strSourceFile, strFileName
Set f = Nothing
End If
Set fso = Nothing
Call PauseScript()
End Function

Call Copy()

Avatar
Jacques Barathon [MS]
"Luc Grangier" wrote in message
news:
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


Allez, pour le plaisir, une version PowerShell:

--- couper ici ---
# 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.??")
)

do {
$now = [datetime]::now
$newname = $now.ToString("yyyyMMdd_HHmmss")
$sourcefile = get-childitem $source
$newname += $sourcefile.extension
copy-item $source $destination$newname
start-sleep $interval
} while ($true)
--- couper ici ---

Exemple:
.copy-file.ps1 macaveavins.mdb c:backups 3600

... crèe une copie le fichier critique dans c:backups toutes les heures.

La boucle est infinie, il faut taper CTRL+C pour l'interrompre. Une
technique plus propre consistera à planifier la tâche de copie avec le
Planificateur de Tâches de Windows (panneau de config Tâches Planifiées, ou
schtasks.exe pour une meilleure granularité dans la planification). Dans ce
cas, il faudra supprimer la boucle do {} while ($true) ainsi que tout ce qui
fait référence à $interval.

Jacques
Jacques

Avatar
Jacques Barathon [MS]
"Jacques Barathon [MS]" wrote in message
news:
<snip>

... crèe une copie le fichier critique dans c:backups toutes les heures.


Ok, on dit "une copie DU fichier", mais vous aurez corrigé...

<snip>
Jacques
Jacques


Non, nous ne nous y mettons pas à deux pour écrire de tels scripts! C'est
juste le jus de fruit non pasteurisé du matin qui m'a filé le hoquet. :-)

Jacques

Avatar
Jean
Allez, pour le plaisir, une version PowerShell:


Fonctionne bien ici en Belgique :-)

J'ai ajouté pour mon confort :

if(([io.directoryinfo]$destination).Exists -eq $false){
new-item -type directory $destination > $null
}

après

$newname += $sourcefile.extension

comme ça si le répertoire destination n'existe pas ou qu'on l'efface il
est (re)créé.

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jean
Non, nous ne nous y mettons pas à deux pour écrire de tels scripts! C'est
juste le jus de fruit non pasteurisé du matin qui m'a filé le hoquet. :-)


A force de travailler sur macaveavins.mdb tout les heures :O)

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jean
if(([io.directoryinfo]$destination).Exists -eq $false){


ou

if((test-path $destination) -eq $false){

--
Jean - JMST
Belgium

Avatar
Luc Grangier
Hello tous,

Merci pour le code ça marche à merveille


Luc Grangier wrote:
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


Quelque chose come ça ?

Option Explicit
Dim pause ' Temps de pause entre deux copies (en secondes)
Dim strSourceFile ' Chemin complet du fichier source
Dim strDestRep ' Chemin complet du repertoire destination (fini par un "/")
pause = 60 ' 1 minute
strSourceFile = "c:ftp.txt"
strDestRep = "D:test"

'Pas besoin d'editer ci-dessous

Function PauseScript()
WScript.Sleep pause * 1000
Call Copy()
End Function

Function GenerateNewName()
Dim strDate, tmp
strDate = Now()
tmp = Year(strDate)
tmp = tmp & Right("0" & Month(strDate), 2)
tmp = tmp & Right("0" & Day(strDate), 2)
tmp = tmp & "_" & Right("0" & Hour(strDate), 2)
tmp = tmp & Right("0" & Minute(strDate), 2)
tmp = tmp & Right("0" & Second(strDate), 2)
GenerateNewName = tmp
End Function

Function Copy()
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(strSourceFile) Then
Dim f, strFileName, strStartName, strExtension, intPosExt
Set f = fso.GetFile(strSourceFile)
strFileName = f.Name
intPosExt = InStrRev(strFileName, ".")
strStartName = Left(strFileName, intPosExt-1)
strExtension = Right(strFileName, Len(strFileName) - intPosExt+1)
strFileName = strDestRep & strStartName & "_" & GenerateNewName &
strExtension
fso.CopyFile strSourceFile, strFileName
Set f = Nothing
End If
Set fso = Nothing
Call PauseScript()
End Function

Call Copy()






Avatar
Jacques Barathon [MS]
"Jean" wrote in message
news:
if(([io.directoryinfo]$destination).Exists -eq $false){


ou

if((test-path $destination) -eq $false){


ou

if(!(test-path $destination)) { ... }

ou même, remplacer tout ça par:

new-item -type directory $destination -ea SilentlyContinue

:-)

Jacques


Avatar
Jacques Barathon [MS]
"Jean" wrote in message
news:
Non, nous ne nous y mettons pas à deux pour écrire de tels scripts! C'est
juste le jus de fruit non pasteurisé du matin qui m'a filé le hoquet. :-)


A force de travailler sur macaveavins.mdb tout les heures :O)


T'as raison... Je me disais bien que c'était bizarre que mon jus de
groseilles ait un goût bouchonné...

Hic!

Jacques


Avatar
Jean
new-item -type directory $destination -ea SilentlyContinue


Ca c'est mieux :-)

Continuons.

On pourrait aussi remplacer

$now = [datetime]::now
$newname = $now.ToString("yyyyMMdd_HHmmss")

par

$newname = (get-date).ToString("yyyyMMdd_HHmmss")

Amicalement,

--
Jean - JMST
Belgium

1 2 3