OVH Cloud OVH Cloud

CopyFile

11 réponses
Avatar
Thierry
Bonjour,

J'ai un script qui copie tous les fichiers d'un r=E9pertoire=20
vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune=20
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque=20
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essay=E9 autremet, en utilisant copy, dans ce cas je=20
r=E9cup=E8re le nom de mon fichier, mais si ma destination=20
n'existe pas, il ne la cr=E9=E9 pas, et puis il me d=E9pose mes=20
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:\Temp c:\Test>>MonLog.log

Avez vous des id=E9es.
J'ai des pistes mais rien de bien g=E9nial pour ceux que =E7a=20
int=E9resse.

Amicalement
Thierry

10 réponses

1 2
Avatar
Georges MAUREL
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et après tout ce fait
tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit dans le message de
news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un répertoire
vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry
Avatar
Thierry
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais je
souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et
après tout ce fait

tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un répertoire
vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry



.



Avatar
Georges MAUREL
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton message original j'ai
été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2 répertoires (avec comp
c:temp c:test >> monlog.log) ou en faisant une liste récusive des 2
répertoires.

Cordialement
Georges


"Thierry" a écrit dans le message de
news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais je
souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et
après tout ce fait

tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un répertoire
vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry



.



Avatar
Thierry
Mea Culpa,

J'ai vu mon erreur après ;o)

L'intruction Comp tu la trouves ou?
J'ai regardé sur le site de Jean Claude Bellamy, mais je
ne l'ai pas trouvé !! Ou ai je mal regardé plutôt.
Je cherche, et je te tiens au courrant.

Merci encore,

Amicalement
Thierry


-----Message d'origine-----
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton
message original j'ai

été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2
répertoires (avec comp

c:temp c:test >> monlog.log) ou en faisant une liste
récusive des 2

répertoires.

Cordialement
Georges


"Thierry" a écrit
dans le message de

news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais je
souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et
après tout ce fait

tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un
répertoire


vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry



.




.




Avatar
Georges MAUREL
Comp est une instruction DOS...
Tu fais comp rep1 rep2 >> monlog et il te sors soit OK s'il trouve 2
fichiers identiques soit xxx manquant.

Sinon, j'ai un script qui peut de permettre de lister le contenu d'un
répertoire de façon récursive.
Mais pour cela tu devras attendre demain

Cordialement
Georges


"Thierry" a écrit dans le message de
news:456101c4732c$1fdbcbb0$
Mea Culpa,

J'ai vu mon erreur après ;o)

L'intruction Comp tu la trouves ou?
J'ai regardé sur le site de Jean Claude Bellamy, mais je
ne l'ai pas trouvé !! Ou ai je mal regardé plutôt.
Je cherche, et je te tiens au courrant.

Merci encore,

Amicalement
Thierry


-----Message d'origine-----
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton
message original j'ai

été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2
répertoires (avec comp

c:temp c:test >> monlog.log) ou en faisant une liste
récusive des 2

répertoires.

Cordialement
Georges


"Thierry" a écrit
dans le message de

news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais je
souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et
après tout ce fait

tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un
répertoire


vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry



.




.




Avatar
Georges MAUREL
Bonjour
Voici le code te permettant de copier un répertoire avec tous ses
sous-répertoire
Si la destination n'exite pas il te propose de la créer
Pour chaque fichier et dossier copié, une ligne est ajoutée dans le fichier
de log crée dans le répertoire destination

* **************************
Dim oFSO, sIncludeTopFolder, fLog
Dim iTotSumOfFiles, iTotSumOfFolders

' Constants for FileSystemObject.CreateTextFile/OpenTextFile
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const OverwriteIfExist = -1
Const FailIfExist = 0

' Ouverture fichier en mode ASCII (TristateFalse)
Const OpenAsASCII = 0

' Opens the file as Unicode (TristateTrue)
Const OpenAsUnicode = -1

' Opens the file using the system default (TristateUseDefault)
Const OpenAsDefault = -2

' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
if MsgBox("Le répertoire " + sauvegarde + " n'existe
pas."+chr(10)+chr(13)+"Voulez-vous le créer ?",4) = 6 then
oFSO.CreateFolder sauvegarde
else
WScript.Quit
end if
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Création du log
Set fLog = oFSO.OpenTextFile(oArg(1) & "monlog.log", ForWriting,
OverwriteIfExist, OpenAsASCII)

CopyDossier(oArg(0))

fLog.WriteLine ""
fLog.WriteLine "copie de " + asauver + " vers " + sauvegarde + " terminée."

fLog.close

wscript.quit

Sub CopyDossier(Dossier)
Dim oFolder, oFile, oSubFolder, iDummy, sErr
Set oFolder = oFSO.GetFolder(Dossier)

fLog.WriteLine oFolder

For Each oFile In oFolder.Files
debut = len(asauver)+2
longueur = len(oFile.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = "" + mid(oFile.ParentFolder,debut,longueur) + ""
else
chemin = ""
end if

set Fichier = oFSO.GetFile(oFile.Path)
Fichier.Copy(sauvegarde+chemin+Fichier.Name)
fLog.WriteLine " " & oFile.Name
Next

For Each SousDossier In oFolder.Subfolders
' Vérification droit sur dossier
On Error Resume Next
iDummy = SousDossier.Files.Count
sErr = Err.Description
On Error Goto 0
If sErr <> "" Then
If Not LCase(sErr) = "permission refusée" Then
fLog.WriteLine "Erreur : Permission refusée pour le dossier " &
SousDossier.Name
End If
Else
debut = len(asauver)+2
longueur = len(SousDossier.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = ""+ mid(SousDossier.ParentFolder,debut,longueur) +""
else
chemin = ""
end if

set File2 = oFSO.GetFolder(SousDossier.Path)
File2.Copy(sauvegarde+chemin+File2.Name)

CopyDossier(SousDossier)
End If
Next
End Sub
*********************

Cordialement
Georges MAUREL


"Thierry" a écrit dans le message de
news:456101c4732c$1fdbcbb0$
Mea Culpa,

J'ai vu mon erreur après ;o)

L'intruction Comp tu la trouves ou?
J'ai regardé sur le site de Jean Claude Bellamy, mais je
ne l'ai pas trouvé !! Ou ai je mal regardé plutôt.
Je cherche, et je te tiens au courrant.

Merci encore,

Amicalement
Thierry


-----Message d'origine-----
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton
message original j'ai

été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2
répertoires (avec comp

c:temp c:test >> monlog.log) ou en faisant une liste
récusive des 2

répertoires.

Cordialement
Georges


"Thierry" a écrit
dans le message de

news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais je
souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial et
après tout ce fait

tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un
répertoire


vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose mes
fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que ça
intéresse.

Amicalement
Thierry



.




.




Avatar
Thierry
Bonjour,

Merci pour ta réponse complète.
J'ai trouvé entre temps un code, je ne sais pas si c'est
vraiment le top du top, mais ça marche aussi.
Je garde le tiens en mémoire quant même.
Voici le mien:
Const overWrite = true
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

' Déclaration des variables de condition
strJour = Left(Date(),2)
strDate = DateAdd("m",-1,Date())
strMois = (Mid(strDate,4,2))

'--------------------------------------
' Définition des chemins
' Répertoire du scipt exécuté
strScript = "C:Temp"

strSrc = "C:Temp" ' Répertoire des sources à copier
strDest = "C:Test" ' Répertoire de destination
strMdbSrc = strSrc & "Toto" ' Répertoire des bases de
données
strMdbHist = strSrc & "HistoDataBase" & strJour '
Répertoire HistoDataBase

' Définition des journaux
strLogProc = strScript & "Traitement.log"
strLogFile = strScript & "SBURCopie.log"

strChemin = ""

' Création d'un nouveau journal chaque 1er de chaque mois
If strJour = 01 Then
Set CopieFile = objFSO.GetFile(strScript & strLogProc)
CopieFile.Copy (strDest & "" & strMois & strLogProc)
CopieFile.Delete
End if

Set strProcLog = objFSO.OpenTextFile(strLogProc,
ForAppending, True)
Set strFileLog = objFSO.OpenTextFile(strLogFile,
ForWriting, True)

strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteLine "Le : " & Now()
strProcLog.WriteBlankLines 1
strProcLog.WriteLine "Sauvegarde des Bases de Données vers
le répertoire HistoDataBase"
strProcLog.WriteBlankLines 1

If (objFSO.FolderExists(strDest)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest)
CreaFolderDemo = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : " &
strDest
End if

objFSO.CopyFolder strMdbSrc, strMdbHist, OverWrite
If Err = 76 Then
strObj = "Erreur dans la copie de sauvegarde"
strBody = "Une erreur s'est produite dans la copie du
répertoire de prodution vers le répertoire historique."
EnvoiMail
End if

Set objWMIService = GetObject("winmgmts:"
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")
Set colSubfolders = objWMIService.ExecQuery("Associators
of {Win32_Directory.Name='" & strSrc & "'} " & "Where
AssocClass = Win32_Subdirectory " & "ResultRole =
PartComponent")

strProcLog.WriteLine "Sauvegarde du Disque D: INTRANET
vers SBUR"
strProcLog.WriteBlankLines 1

For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest &
strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : "
& strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc & strChemin
& "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier
(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun fichier
copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
Sousrep
Next

Set objfilesRep = ObjFso.GetFolder(strSrc)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(objFilesRep.Name)
CopieFile.Copy (strDest & "" & objFilesRep.Name)
strName = strName & strSrc & "" & objFilesRep.Name
& vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier(s) copié
(s)." & vbCrLf
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc & strChemin & vbcrLf & vbTab & NbFile & " fichier
(s) copié(s)."
Else
strFileLog.WriteLine vbTab & "Auncun fichier copié." &
vbCrLf
End if

strProcLog.WriteLine "Fin de la procédure le : " & Now()
strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteBlankLines 1
strProcLog.Close

If Err = 76 Then
strObj = "Erreur dans la copie vers SBUR"
strBody = "Une erreur s'est produite dans la sauvegarde
d'INTRANET vers SBUR."
EnvoiMail
End if

MsgBox "Fin de la procédure de
réplication.",4160,"Terminé !"


'----------------------------------------------------------
--------------
Function CreateFolder
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder(valeurA)
CreateFolderDemo = f.Path
End function


Function SousRep
strChemin = ""
If strTmp = objFolder.Name Then
exit Function
Else
Set colSubfolders = objWMIService.ExecQuery
("Associators of {Win32_Directory.Name='" & objFolder.Name
& "'} " & "Where AssocClass = Win32_Subdirectory "
& "ResultRole = PartComponent")
For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin))
Then
Else
Set CreaFold = objFSO.CreateFolder(strDest
& strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du
Répertoire : " & strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc &
strChemin & "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & "
fichier(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun
fichier copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
SousRep
Next
End if
End Function


Pas forcément tout complet et avec gestion de toutes les
erreurs, mais il semble fonctionner :o)

Amicalement
Thierry
-----Message d'origine-----
Bonjour
Voici le code te permettant de copier un répertoire avec
tous ses

sous-répertoire
Si la destination n'exite pas il te propose de la créer
Pour chaque fichier et dossier copié, une ligne est
ajoutée dans le fichier

de log crée dans le répertoire destination

* **************************
Dim oFSO, sIncludeTopFolder, fLog
Dim iTotSumOfFiles, iTotSumOfFolders

' Constants for
FileSystemObject.CreateTextFile/OpenTextFile

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const OverwriteIfExist = -1
Const FailIfExist = 0

' Ouverture fichier en mode ASCII (TristateFalse)
Const OpenAsASCII = 0

' Opens the file as Unicode (TristateTrue)
Const OpenAsUnicode = -1

' Opens the file using the system default
(TristateUseDefault)

Const OpenAsDefault = -2

' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
if MsgBox("Le répertoire " + sauvegarde + " n'existe
pas."+chr(10)+chr(13)+"Voulez-vous le créer ?",4) = 6 then
oFSO.CreateFolder sauvegarde
else
WScript.Quit
end if
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Création du log
Set fLog = oFSO.OpenTextFile(oArg(1) & "monlog.log",
ForWriting,

OverwriteIfExist, OpenAsASCII)

CopyDossier(oArg(0))

fLog.WriteLine ""
fLog.WriteLine "copie de " + asauver + " vers " +
sauvegarde + " terminée."


fLog.close

wscript.quit

Sub CopyDossier(Dossier)
Dim oFolder, oFile, oSubFolder, iDummy, sErr
Set oFolder = oFSO.GetFolder(Dossier)

fLog.WriteLine oFolder

For Each oFile In oFolder.Files
debut = len(asauver)+2
longueur = len(oFile.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = "" + mid
(oFile.ParentFolder,debut,longueur) + ""

else
chemin = ""
end if

set Fichier = oFSO.GetFile(oFile.Path)
Fichier.Copy(sauvegarde+chemin+Fichier.Name)
fLog.WriteLine " " & oFile.Name
Next

For Each SousDossier In oFolder.Subfolders
' Vérification droit sur dossier
On Error Resume Next
iDummy = SousDossier.Files.Count
sErr = Err.Description
On Error Goto 0
If sErr <> "" Then
If Not LCase(sErr) = "permission refusée" Then
fLog.WriteLine "Erreur : Permission refusée pour
le dossier " &

SousDossier.Name
End If
Else
debut = len(asauver)+2
longueur = len(SousDossier.ParentFolder)-len
(asauver)-1

if longueur > 0 then
chemin = ""+ mid
(SousDossier.ParentFolder,debut,longueur) +""

else
chemin = ""
end if

set File2 = oFSO.GetFolder(SousDossier.Path)
File2.Copy(sauvegarde+chemin+File2.Name)

CopyDossier(SousDossier)
End If
Next
End Sub
*********************

Cordialement
Georges MAUREL


"Thierry" a écrit
dans le message de

news:456101c4732c$1fdbcbb0$
Mea Culpa,

J'ai vu mon erreur après ;o)

L'intruction Comp tu la trouves ou?
J'ai regardé sur le site de Jean Claude Bellamy, mais je
ne l'ai pas trouvé !! Ou ai je mal regardé plutôt.
Je cherche, et je te tiens au courrant.

Merci encore,

Amicalement
Thierry


-----Message d'origine-----
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton
message original j'ai

été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2
répertoires (avec comp

c:temp c:test >> monlog.log) ou en faisant une liste
récusive des 2

répertoires.

Cordialement
Georges


"Thierry" a écrit
dans le message de

news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais
je


souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial
et



après tout ce fait
tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un
répertoire


vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose
mes



fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que
ça



intéresse.

Amicalement
Thierry



.




.




.





Avatar
Georges MAUREL
Bonjour,
Sans vouloir me vanter, mon code, même s'il n'est pas le top du top non
plus, me semble plus simple et moins long du fait de l'emploi
d'une fonction récursive. Mais c'est toi qui voit ce qui te semble le plus
intéressant pour toi. J'espère que cela te donnera des pistes pour
finaliser ton code.

Cordialement
Georges

"Thierry" a écrit dans le message de
news:594f01c4748c$e35fdb10$
Bonjour,

Merci pour ta réponse complète.
J'ai trouvé entre temps un code, je ne sais pas si c'est
vraiment le top du top, mais ça marche aussi.
Je garde le tiens en mémoire quant même.
Voici le mien:
Const overWrite = true
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

' Déclaration des variables de condition
strJour = Left(Date(),2)
strDate = DateAdd("m",-1,Date())
strMois = (Mid(strDate,4,2))

'--------------------------------------
' Définition des chemins
' Répertoire du scipt exécuté
strScript = "C:Temp"

strSrc = "C:Temp" ' Répertoire des sources à copier
strDest = "C:Test" ' Répertoire de destination
strMdbSrc = strSrc & "Toto" ' Répertoire des bases de
données
strMdbHist = strSrc & "HistoDataBase" & strJour '
Répertoire HistoDataBase

' Définition des journaux
strLogProc = strScript & "Traitement.log"
strLogFile = strScript & "SBURCopie.log"

strChemin = ""

' Création d'un nouveau journal chaque 1er de chaque mois
If strJour = 01 Then
Set CopieFile = objFSO.GetFile(strScript & strLogProc)
CopieFile.Copy (strDest & "" & strMois & strLogProc)
CopieFile.Delete
End if

Set strProcLog = objFSO.OpenTextFile(strLogProc,
ForAppending, True)
Set strFileLog = objFSO.OpenTextFile(strLogFile,
ForWriting, True)

strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteLine "Le : " & Now()
strProcLog.WriteBlankLines 1
strProcLog.WriteLine "Sauvegarde des Bases de Données vers
le répertoire HistoDataBase"
strProcLog.WriteBlankLines 1

If (objFSO.FolderExists(strDest)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest)
CreaFolderDemo = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : " &
strDest
End if

objFSO.CopyFolder strMdbSrc, strMdbHist, OverWrite
If Err = 76 Then
strObj = "Erreur dans la copie de sauvegarde"
strBody = "Une erreur s'est produite dans la copie du
répertoire de prodution vers le répertoire historique."
EnvoiMail
End if

Set objWMIService = GetObject("winmgmts:"
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")
Set colSubfolders = objWMIService.ExecQuery("Associators
of {Win32_Directory.Name='" & strSrc & "'} " & "Where
AssocClass = Win32_Subdirectory " & "ResultRole PartComponent")

strProcLog.WriteLine "Sauvegarde du Disque D: INTRANET
vers SBUR"
strProcLog.WriteBlankLines 1

For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest &
strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : "
& strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc & strChemin
& "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier
(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun fichier
copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
Sousrep
Next

Set objfilesRep = ObjFso.GetFolder(strSrc)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(objFilesRep.Name)
CopieFile.Copy (strDest & "" & objFilesRep.Name)
strName = strName & strSrc & "" & objFilesRep.Name
& vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier(s) copié
(s)." & vbCrLf
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc & strChemin & vbcrLf & vbTab & NbFile & " fichier
(s) copié(s)."
Else
strFileLog.WriteLine vbTab & "Auncun fichier copié." &
vbCrLf
End if

strProcLog.WriteLine "Fin de la procédure le : " & Now()
strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteBlankLines 1
strProcLog.Close

If Err = 76 Then
strObj = "Erreur dans la copie vers SBUR"
strBody = "Une erreur s'est produite dans la sauvegarde
d'INTRANET vers SBUR."
EnvoiMail
End if

MsgBox "Fin de la procédure de
réplication.",4160,"Terminé !"


'----------------------------------------------------------
--------------
Function CreateFolder
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder(valeurA)
CreateFolderDemo = f.Path
End function


Function SousRep
strChemin = ""
If strTmp = objFolder.Name Then
exit Function
Else
Set colSubfolders = objWMIService.ExecQuery
("Associators of {Win32_Directory.Name='" & objFolder.Name
& "'} " & "Where AssocClass = Win32_Subdirectory "
& "ResultRole = PartComponent")
For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin))
Then
Else
Set CreaFold = objFSO.CreateFolder(strDest
& strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du
Répertoire : " & strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc &
strChemin & "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & "
fichier(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun
fichier copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
SousRep
Next
End if
End Function


Pas forcément tout complet et avec gestion de toutes les
erreurs, mais il semble fonctionner :o)

Amicalement
Thierry
-----Message d'origine-----
Bonjour
Voici le code te permettant de copier un répertoire avec
tous ses

sous-répertoire
Si la destination n'exite pas il te propose de la créer
Pour chaque fichier et dossier copié, une ligne est
ajoutée dans le fichier

de log crée dans le répertoire destination

* **************************
Dim oFSO, sIncludeTopFolder, fLog
Dim iTotSumOfFiles, iTotSumOfFolders

' Constants for
FileSystemObject.CreateTextFile/OpenTextFile

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const OverwriteIfExist = -1
Const FailIfExist = 0

' Ouverture fichier en mode ASCII (TristateFalse)
Const OpenAsASCII = 0

' Opens the file as Unicode (TristateTrue)
Const OpenAsUnicode = -1

' Opens the file using the system default
(TristateUseDefault)

Const OpenAsDefault = -2

' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
if MsgBox("Le répertoire " + sauvegarde + " n'existe
pas."+chr(10)+chr(13)+"Voulez-vous le créer ?",4) = 6 then
oFSO.CreateFolder sauvegarde
else
WScript.Quit
end if
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Création du log
Set fLog = oFSO.OpenTextFile(oArg(1) & "monlog.log",
ForWriting,

OverwriteIfExist, OpenAsASCII)

CopyDossier(oArg(0))

fLog.WriteLine ""
fLog.WriteLine "copie de " + asauver + " vers " +
sauvegarde + " terminée."


fLog.close

wscript.quit

Sub CopyDossier(Dossier)
Dim oFolder, oFile, oSubFolder, iDummy, sErr
Set oFolder = oFSO.GetFolder(Dossier)

fLog.WriteLine oFolder

For Each oFile In oFolder.Files
debut = len(asauver)+2
longueur = len(oFile.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = "" + mid
(oFile.ParentFolder,debut,longueur) + ""

else
chemin = ""
end if

set Fichier = oFSO.GetFile(oFile.Path)
Fichier.Copy(sauvegarde+chemin+Fichier.Name)
fLog.WriteLine " " & oFile.Name
Next

For Each SousDossier In oFolder.Subfolders
' Vérification droit sur dossier
On Error Resume Next
iDummy = SousDossier.Files.Count
sErr = Err.Description
On Error Goto 0
If sErr <> "" Then
If Not LCase(sErr) = "permission refusée" Then
fLog.WriteLine "Erreur : Permission refusée pour
le dossier " &

SousDossier.Name
End If
Else
debut = len(asauver)+2
longueur = len(SousDossier.ParentFolder)-len
(asauver)-1

if longueur > 0 then
chemin = ""+ mid
(SousDossier.ParentFolder,debut,longueur) +""

else
chemin = ""
end if

set File2 = oFSO.GetFolder(SousDossier.Path)
File2.Copy(sauvegarde+chemin+File2.Name)

CopyDossier(SousDossier)
End If
Next
End Sub
*********************

Cordialement
Georges MAUREL


"Thierry" a écrit
dans le message de

news:456101c4732c$1fdbcbb0$
Mea Culpa,

J'ai vu mon erreur après ;o)

L'intruction Comp tu la trouves ou?
J'ai regardé sur le site de Jean Claude Bellamy, mais je
ne l'ai pas trouvé !! Ou ai je mal regardé plutôt.
Je cherche, et je te tiens au courrant.

Merci encore,

Amicalement
Thierry


-----Message d'origine-----
Re salut Thierry
Désolé mais comme tu avais noté copy /i... dans ton
message original j'ai

été enduit d'erreur...

Sinon, tu peux utilise copyfolder de la façon suivante
**********************
' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
MsgBox "Répertoire incorrect" + sauvegarde
WScript.Quit
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Copy d un répertoire vers un autre
set fso = Createobject("Scripting.FileSystemObject")
fso.CopyFolder asauver, sauvegarde

wscript.quit
***********************
Il ne te reste plus qu'à comparer le contenu de tes 2
répertoires (avec comp

c:temp c:test >> monlog.log) ou en faisant une liste
récusive des 2

répertoires.

Cordialement
Georges


"Thierry" a écrit
dans le message de

news:41de01c4731e$82310400$
Bonjour,

C'est bien xcopy que j'utilise à l'heure actuelle, mais
je


souhaite passer tout ceci en vbscript.
;o)
Amicalement
Thierry,

-----Message d'origine-----
Salut Thierry
Pourquoi n'utilises-tu pas xcopy ? Dans ce cas tu aurais
xcopy /i /e /s /y c:Temp c:Test>>MonLog.log

Il te suffit juste de créer le répertoire test initial
et



après tout ce fait
tout seul et tu as ton fichier log qui se remplit

Cordialement
Georges



"Thierry" a écrit
dans le message de

news:435201c47317$a9b0b9f0$
Bonjour,

J'ai un script qui copie tous les fichiers d'un
répertoire


vers un autre.
Ca fonctionne, le seul soucis, c'est que je n'ai aucune
trace de la copie.
Autrement dit, sous ms-dos, j'avais une trace de chaque
fichier, ici, je n'ai rien.
Je souhaite avoir une trace de chaque fichier copier.
J'utilise CopyFile, y a t'il un moyen de faire cela.

J'ai essayé autremet, en utilisant copy, dans ce cas je
récupère le nom de mon fichier, mais si ma destination
n'existe pas, il ne la créé pas, et puis il me dépose
mes



fichier en vrac, je souhaite conserver mon arborescence.

En clair, je souhaite un:
copy /i /e /s /y c:Temp c:Test>>MonLog.log

Avez vous des idées.
J'ai des pistes mais rien de bien génial pour ceux que
ça



intéresse.

Amicalement
Thierry



.




.




.





Avatar
jbongran
Georges MAUREL wrote:
Bonjour,
Sans vouloir me vanter, mon code, même s'il n'est pas le top du top
non plus, me semble plus simple et moins long du fait de l'emploi
d'une fonction récursive. Mais c'est toi qui voit ce qui te semble le
plus intéressant pour toi. J'espère que cela te donnera des pistes
pour finaliser ton code.

Cordialement
Georges

"Thierry" a écrit dans le
message de news:594f01c4748c$e35fdb10$
Bonjour,

Merci pour ta réponse complète.
J'ai trouvé entre temps un code, je ne sais pas si c'est
vraiment le top du top, mais ça marche aussi.
Je garde le tiens en mémoire quant même.
Voici le mien:
Const overWrite = true
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

' Déclaration des variables de condition
strJour = Left(Date(),2)
strDate = DateAdd("m",-1,Date())
strMois = (Mid(strDate,4,2))

'--------------------------------------
' Définition des chemins
' Répertoire du scipt exécuté
strScript = "C:Temp"

strSrc = "C:Temp" ' Répertoire des sources à copier
strDest = "C:Test" ' Répertoire de destination
strMdbSrc = strSrc & "Toto" ' Répertoire des bases de
données
strMdbHist = strSrc & "HistoDataBase" & strJour '
Répertoire HistoDataBase

' Définition des journaux
strLogProc = strScript & "Traitement.log"
strLogFile = strScript & "SBURCopie.log"

strChemin = ""

' Création d'un nouveau journal chaque 1er de chaque mois
If strJour = 01 Then
Set CopieFile = objFSO.GetFile(strScript & strLogProc)
CopieFile.Copy (strDest & "" & strMois & strLogProc)
CopieFile.Delete
End if

Set strProcLog = objFSO.OpenTextFile(strLogProc,
ForAppending, True)
Set strFileLog = objFSO.OpenTextFile(strLogFile,
ForWriting, True)

strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteLine "Le : " & Now()
strProcLog.WriteBlankLines 1
strProcLog.WriteLine "Sauvegarde des Bases de Données vers
le répertoire HistoDataBase"
strProcLog.WriteBlankLines 1

If (objFSO.FolderExists(strDest)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest)
CreaFolderDemo = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : " &
strDest
End if

objFSO.CopyFolder strMdbSrc, strMdbHist, OverWrite
If Err = 76 Then
strObj = "Erreur dans la copie de sauvegarde"
strBody = "Une erreur s'est produite dans la copie du
répertoire de prodution vers le répertoire historique."
EnvoiMail
End if

Set objWMIService = GetObject("winmgmts:"
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")
Set colSubfolders = objWMIService.ExecQuery("Associators
of {Win32_Directory.Name='" & strSrc & "'} " & "Where
AssocClass = Win32_Subdirectory " & "ResultRole > PartComponent")

strProcLog.WriteLine "Sauvegarde du Disque D: INTRANET
vers SBUR"
strProcLog.WriteBlankLines 1

For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest &
strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : "
& strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc & strChemin
& "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier
(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun fichier
copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
Sousrep
Next

Set objfilesRep = ObjFso.GetFolder(strSrc)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(objFilesRep.Name)
CopieFile.Copy (strDest & "" & objFilesRep.Name)
strName = strName & strSrc & "" & objFilesRep.Name
& vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier(s) copié
(s)." & vbCrLf
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc & strChemin & vbcrLf & vbTab & NbFile & " fichier
(s) copié(s)."
Else
strFileLog.WriteLine vbTab & "Auncun fichier copié." &
vbCrLf
End if

strProcLog.WriteLine "Fin de la procédure le : " & Now()
strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteBlankLines 1
strProcLog.Close

If Err = 76 Then
strObj = "Erreur dans la copie vers SBUR"
strBody = "Une erreur s'est produite dans la sauvegarde
d'INTRANET vers SBUR."
EnvoiMail
End if

MsgBox "Fin de la procédure de
réplication.",4160,"Terminé !"


'----------------------------------------------------------
--------------
Function CreateFolder
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder(valeurA)
CreateFolderDemo = f.Path
End function


Function SousRep
strChemin = ""
If strTmp = objFolder.Name Then
exit Function
Else
Set colSubfolders = objWMIService.ExecQuery
("Associators of {Win32_Directory.Name='" & objFolder.Name
& "'} " & "Where AssocClass = Win32_Subdirectory "
& "ResultRole = PartComponent")
For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin))
Then
Else
Set CreaFold = objFSO.CreateFolder(strDest
& strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du
Répertoire : " & strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc &
strChemin & "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & "
fichier(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun
fichier copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
SousRep
Next
End if
End Function


Pas forcément tout complet et avec gestion de toutes les
erreurs, mais il semble fonctionner :o)

Amicalement
Thierry
-----Message d'origine-----
Bonjour
Voici le code te permettant de copier un répertoire avec
tous ses

sous-répertoire
Si la destination n'exite pas il te propose de la créer
Pour chaque fichier et dossier copié, une ligne est
ajoutée dans le fichier

de log crée dans le répertoire destination

* **************************
Dim oFSO, sIncludeTopFolder, fLog
Dim iTotSumOfFiles, iTotSumOfFolders

' Constants for
FileSystemObject.CreateTextFile/OpenTextFile

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const OverwriteIfExist = -1
Const FailIfExist = 0

' Ouverture fichier en mode ASCII (TristateFalse)
Const OpenAsASCII = 0

' Opens the file as Unicode (TristateTrue)
Const OpenAsUnicode = -1

' Opens the file using the system default
(TristateUseDefault)

Const OpenAsDefault = -2

' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
if MsgBox("Le répertoire " + sauvegarde + " n'existe
pas."+chr(10)+chr(13)+"Voulez-vous le créer ?",4) = 6 then
oFSO.CreateFolder sauvegarde
else
WScript.Quit
end if
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Création du log
Set fLog = oFSO.OpenTextFile(oArg(1) & "monlog.log",
ForWriting,

OverwriteIfExist, OpenAsASCII)

CopyDossier(oArg(0))

fLog.WriteLine ""
fLog.WriteLine "copie de " + asauver + " vers " +
sauvegarde + " terminée."


fLog.close

wscript.quit

Sub CopyDossier(Dossier)
Dim oFolder, oFile, oSubFolder, iDummy, sErr
Set oFolder = oFSO.GetFolder(Dossier)

fLog.WriteLine oFolder

For Each oFile In oFolder.Files
debut = len(asauver)+2
longueur = len(oFile.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = "" + mid
(oFile.ParentFolder,debut,longueur) + ""

else
chemin = ""
end if

set Fichier = oFSO.GetFile(oFile.Path)
Fichier.Copy(sauvegarde+chemin+Fichier.Name)
fLog.WriteLine " " & oFile.Name
Next

For Each SousDossier In oFolder.Subfolders
' Vérification droit sur dossier
On Error Resume Next
iDummy = SousDossier.Files.Count
sErr = Err.Description
On Error Goto 0
If sErr <> "" Then
If Not LCase(sErr) = "permission refusée" Then
fLog.WriteLine "Erreur : Permission refusée pour
le dossier " &

SousDossier.Name
End If
Else
debut = len(asauver)+2
longueur = len(SousDossier.ParentFolder)-len
(asauver)-1

if longueur > 0 then
chemin = ""+ mid
(SousDossier.ParentFolder,debut,longueur) +""

else
chemin = ""
end if

set File2 = oFSO.GetFolder(SousDossier.Path)
File2.Copy(sauvegarde+chemin+File2.Name)

CopyDossier(SousDossier)
End If
Next
End Sub
*********************

Sans compter que ce code est plein d'approximations :


strJour = Left(Date(),2) ' Retourne une CHAINE de 2 caractères
If strJour = 01 Then ' evalue un nombre
Aurait dû être strJour = Day(Date()) ' Retourne un nombre entre 1 et 31
Ou alors If strJour = "01"
Au lieu d'utiliser des WriteBlankLines 1 il est plus efficace de mettre un
vbCrLf en fin de chaine
Comme il n'y a pas de On Error Resume Next la ligne If Err = 76 ne sera
jamais atteinte
Cosmétique, mail manque un antislash ici D: INTRANET
L'usage de + au lieu du caractère normal de concaténation de chaine peut
produire des résultats surprenants
Etc...
Me fait penser à du copier/coller de différentes sources ?


Avatar
Georges MAUREL
Bonjour jbongran,
je pense que tu es un peu sévère avec lui car si son code lui convient...

Cordialement
Georges

"jbongran" a écrit dans le message de
news:41082344$0$31870$
Georges MAUREL wrote:
Bonjour,
Sans vouloir me vanter, mon code, même s'il n'est pas le top du top
non plus, me semble plus simple et moins long du fait de l'emploi
d'une fonction récursive. Mais c'est toi qui voit ce qui te semble le
plus intéressant pour toi. J'espère que cela te donnera des pistes
pour finaliser ton code.

Cordialement
Georges

"Thierry" a écrit dans le
message de news:594f01c4748c$e35fdb10$
Bonjour,

Merci pour ta réponse complète.
J'ai trouvé entre temps un code, je ne sais pas si c'est
vraiment le top du top, mais ça marche aussi.
Je garde le tiens en mémoire quant même.
Voici le mien:
Const overWrite = true
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

' Déclaration des variables de condition
strJour = Left(Date(),2)
strDate = DateAdd("m",-1,Date())
strMois = (Mid(strDate,4,2))

'--------------------------------------
' Définition des chemins
' Répertoire du scipt exécuté
strScript = "C:Temp"

strSrc = "C:Temp" ' Répertoire des sources à copier
strDest = "C:Test" ' Répertoire de destination
strMdbSrc = strSrc & "Toto" ' Répertoire des bases de
données
strMdbHist = strSrc & "HistoDataBase" & strJour '
Répertoire HistoDataBase

' Définition des journaux
strLogProc = strScript & "Traitement.log"
strLogFile = strScript & "SBURCopie.log"

strChemin = ""

' Création d'un nouveau journal chaque 1er de chaque mois
If strJour = 01 Then
Set CopieFile = objFSO.GetFile(strScript & strLogProc)
CopieFile.Copy (strDest & "" & strMois & strLogProc)
CopieFile.Delete
End if

Set strProcLog = objFSO.OpenTextFile(strLogProc,
ForAppending, True)
Set strFileLog = objFSO.OpenTextFile(strLogFile,
ForWriting, True)

strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteLine "Le : " & Now()
strProcLog.WriteBlankLines 1
strProcLog.WriteLine "Sauvegarde des Bases de Données vers
le répertoire HistoDataBase"
strProcLog.WriteBlankLines 1

If (objFSO.FolderExists(strDest)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest)
CreaFolderDemo = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : " &
strDest
End if

objFSO.CopyFolder strMdbSrc, strMdbHist, OverWrite
If Err = 76 Then
strObj = "Erreur dans la copie de sauvegarde"
strBody = "Une erreur s'est produite dans la copie du
répertoire de prodution vers le répertoire historique."
EnvoiMail
End if

Set objWMIService = GetObject("winmgmts:"
& "{impersonationLevel=impersonate}!" & strComputer
& "rootcimv2")
Set colSubfolders = objWMIService.ExecQuery("Associators
of {Win32_Directory.Name='" & strSrc & "'} " & "Where
AssocClass = Win32_Subdirectory " & "ResultRole > > PartComponent")

strProcLog.WriteLine "Sauvegarde du Disque D: INTRANET
vers SBUR"
strProcLog.WriteBlankLines 1

For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin)) Then
Else
Set CreaFold = objFSO.CreateFolder(strDest &
strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du Répertoire : "
& strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc & strChemin
& "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier
(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun fichier
copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
Sousrep
Next

Set objfilesRep = ObjFso.GetFolder(strSrc)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(objFilesRep.Name)
CopieFile.Copy (strDest & "" & objFilesRep.Name)
strName = strName & strSrc & "" & objFilesRep.Name
& vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & " fichier(s) copié
(s)." & vbCrLf
strFileLog.WriteLine "Sauvegarde du Répertoire : " &
strSrc & strChemin & vbcrLf & vbTab & NbFile & " fichier
(s) copié(s)."
Else
strFileLog.WriteLine vbTab & "Auncun fichier copié." &
vbCrLf
End if

strProcLog.WriteLine "Fin de la procédure le : " & Now()
strProcLog.WriteLine "*************************************
*********************************"
strProcLog.WriteBlankLines 1
strProcLog.Close

If Err = 76 Then
strObj = "Erreur dans la copie vers SBUR"
strBody = "Une erreur s'est produite dans la sauvegarde
d'INTRANET vers SBUR."
EnvoiMail
End if

MsgBox "Fin de la procédure de
réplication.",4160,"Terminé !"


'----------------------------------------------------------
--------------
Function CreateFolder
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder(valeurA)
CreateFolderDemo = f.Path
End function


Function SousRep
strChemin = ""
If strTmp = objFolder.Name Then
exit Function
Else
Set colSubfolders = objWMIService.ExecQuery
("Associators of {Win32_Directory.Name='" & objFolder.Name
& "'} " & "Where AssocClass = Win32_Subdirectory "
& "ResultRole = PartComponent")
For Each objFolder in colSubfolders
NbCar = Len(objFolder.Name) - 3
Result = Right(objFolder.Name, NbCar)
NomRep = Split(Result,"",-1,1)
ValMax = Ubound(NomRep)
For i=1 to ValMax
strChemin = strChemin + "" + NomRep(i)
If (objFSO.FolderExists(strDest & strchemin))
Then
Else
Set CreaFold = objFSO.CreateFolder(strDest
& strChemin)
CreaFolder = CreaFold.Path
strFileLog.WriteLine "Création du
Répertoire : " & strDest & strChemin
End if
Set objfilesRep = ObjFso.GetFolder(strSrc &
strChemin)
Set ColFilesRep = objfilesRep.files
strFileLog.WriteLine "Sauvegarde du
Répertoire : " & strSrc & strChemin
For Each objFilesRep in ColFilesRep
NbFile = NbFile + 1
Set CopieFile = objFSO.GetFile(strSrc &
strChemin & "" & objFilesRep.Name)
CopieFile.Copy (strDest & strChemin & "" &
objFilesRep.Name)
strName = strName & strSrc & "" &
objFilesRep.Name & vbCrLf
Next
If NbFile > 0 Then
strFileLog.WriteLine strName
strFileLog.WriteLine vbTab & NbFile & "
fichier(s) copié(s)." & vbCrLf
Else
strFileLog.WriteLine vbTab & "Auncun
fichier copié." & vbCrLf
End if
NbFile = 0
strName = ""
Next
SousRep
Next
End if
End Function


Pas forcément tout complet et avec gestion de toutes les
erreurs, mais il semble fonctionner :o)

Amicalement
Thierry
-----Message d'origine-----
Bonjour
Voici le code te permettant de copier un répertoire avec
tous ses

sous-répertoire
Si la destination n'exite pas il te propose de la créer
Pour chaque fichier et dossier copié, une ligne est
ajoutée dans le fichier

de log crée dans le répertoire destination

* **************************
Dim oFSO, sIncludeTopFolder, fLog
Dim iTotSumOfFiles, iTotSumOfFolders

' Constants for
FileSystemObject.CreateTextFile/OpenTextFile

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const OverwriteIfExist = -1
Const FailIfExist = 0

' Ouverture fichier en mode ASCII (TristateFalse)
Const OpenAsASCII = 0

' Opens the file as Unicode (TristateTrue)
Const OpenAsUnicode = -1

' Opens the file using the system default
(TristateUseDefault)

Const OpenAsDefault = -2

' 2 Arguments :
' 1° le chemin à sauver
' 2° le chemin de sauvegarde
' ex : monvbs.vbs "c:temp" "c:test"
Set oArg = WScript.Arguments

If oArg.Count < 2 Then
MsgBox "Nombre de paramètres incorrects"
WScript.Quit
End If

asauver = oArg(0)
sauvegarde = oArg(1)

Set oFSO = CreateObject("Scripting.FileSystemObject")

if oFSO.Folderexists(asauver) Then
if oFSO.Folderexists(sauvegarde) Then
else
if MsgBox("Le répertoire " + sauvegarde + " n'existe
pas."+chr(10)+chr(13)+"Voulez-vous le créer ?",4) = 6 then
oFSO.CreateFolder sauvegarde
else
WScript.Quit
end if
end if
else
MsgBox "Répertoire incorrect" + asauver
WScript.Quit
end if

' Création du log
Set fLog = oFSO.OpenTextFile(oArg(1) & "monlog.log",
ForWriting,

OverwriteIfExist, OpenAsASCII)

CopyDossier(oArg(0))

fLog.WriteLine ""
fLog.WriteLine "copie de " + asauver + " vers " +
sauvegarde + " terminée."


fLog.close

wscript.quit

Sub CopyDossier(Dossier)
Dim oFolder, oFile, oSubFolder, iDummy, sErr
Set oFolder = oFSO.GetFolder(Dossier)

fLog.WriteLine oFolder

For Each oFile In oFolder.Files
debut = len(asauver)+2
longueur = len(oFile.ParentFolder)-len(asauver)-1
if longueur > 0 then
chemin = "" + mid
(oFile.ParentFolder,debut,longueur) + ""

else
chemin = ""
end if

set Fichier = oFSO.GetFile(oFile.Path)
Fichier.Copy(sauvegarde+chemin+Fichier.Name)
fLog.WriteLine " " & oFile.Name
Next

For Each SousDossier In oFolder.Subfolders
' Vérification droit sur dossier
On Error Resume Next
iDummy = SousDossier.Files.Count
sErr = Err.Description
On Error Goto 0
If sErr <> "" Then
If Not LCase(sErr) = "permission refusée" Then
fLog.WriteLine "Erreur : Permission refusée pour
le dossier " &

SousDossier.Name
End If
Else
debut = len(asauver)+2
longueur = len(SousDossier.ParentFolder)-len
(asauver)-1

if longueur > 0 then
chemin = ""+ mid
(SousDossier.ParentFolder,debut,longueur) +""

else
chemin = ""
end if

set File2 = oFSO.GetFolder(SousDossier.Path)
File2.Copy(sauvegarde+chemin+File2.Name)

CopyDossier(SousDossier)
End If
Next
End Sub
*********************

Sans compter que ce code est plein d'approximations :


strJour = Left(Date(),2) ' Retourne une CHAINE de 2 caractères
If strJour = 01 Then ' evalue un nombre
Aurait dû être strJour = Day(Date()) ' Retourne un nombre entre 1 et 31
Ou alors If strJour = "01"
Au lieu d'utiliser des WriteBlankLines 1 il est plus efficace de mettre un
vbCrLf en fin de chaine
Comme il n'y a pas de On Error Resume Next la ligne If Err = 76 ne sera
jamais atteinte
Cosmétique, mail manque un antislash ici D: INTRANET
L'usage de + au lieu du caractère normal de concaténation de chaine peut
produire des résultats surprenants
Etc...
Me fait penser à du copier/coller de différentes sources ?











1 2