OVH Cloud OVH Cloud

Encore un problème de syntaxe

17 réponses
Avatar
Alain Lebayle
Bonjour,
J'ai un problème (encore une fois ;-)) d'écriture, j'ai une variable
Origine, mais le pb est que le dossier : ia02c5qy.default change d'un PC
à l'autre, mais il reste .default

Origine = "C:\Documents and Settings\l'utilisateur\Application
Data\Thunderbird\Profiles\ia02c5qy.default\prefs.js"

J'essaie quelque chose comme cela, mais cela ne fonctionne pas.

Origine = "C:\Documents and Settings\l'utilisateur\Application
Data\Thunderbird\Profiles\" & "*" &".default\prefs.js"

Je vous remercie
Alain

7 réponses

1 2
Avatar
Alain Lebayle
Bonsoir Jacques93,
Je te remercie grandement encore une fois pour ton aide très précieuse
ainsi que tes explications très claires.

En fait, j'ai les 2 cas de figure, soit 2 types de PC

1) l'utilisateur :
"C:Documents and SettingsutilisateurApplication
DataThunderbirdProfiles*.defaultprefs.js"

2) Une session "micro" :
"C:Documents and SettingsmicroApplication
DataThunderbirdProfiles*.defaultprefs.js"

Je te remercie +++
Alain


Jacques93 a écrit :

1 - Le format de date que tu intègre dans le nom de ton fichier n'est
pas adapté :

La_date = FormatDateTime(Now, 1)

génère, pour aujourd'hui : dimanche 11 avril 2010
ce n'est pas exploitable par DateDiff. Il vaudrait mieux utiliser

La_date = FormatDateTime(Now, 2)

qui génèrera la date sous la forme : 11/04/2010
Le nom de ton fichier sera donc : "prefs.js du 11/04/2010"
Il te suffira ensuite dans la procédure de suppression de récupérer
cette date avec :

dt = Mid (NomDuFichier, 13)
If DateDiff("m", dt, now) > 3 Then
fso.DeleteFile ...
...
End If

Et pour parcourir le répertoire C:PREFS.JS, la procédure que t'as
indiqué michdenis dans l'autre fil :

<Citation michdenis>

C ) Tu voulais savoir comment arriver à supprimer des fichiers à
partir d'un certain critère que tu avais mal défini dans ta
question initiale. Je t'ai donné un exemple. Cette procédure
supprime tous les fichiers du chemin du répertoire passé en
paramètre s'il s'est écoulé plus de 3 mois.
'-------------------------------------------
Sub Supprimer_Fichier_Plus_Vieux_Trois_Mois(Repertoire)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Rep = objFSO.GetFolder(Repertoire)
For Each F In Rep.files
If DateDiff("m", F.DateLastAccessed, Now) > 3 then
F.delete
End If
Next
Set objFSO = Nothing: Set Rep = Nothing: Set F = Nothing
End Sub

</Citation michdenis>

est parfaitement adaptée, en remplaçant F.DateLastAccessed par la
variable dt :

For Each F In Rep.files
dt = Mid (F.Name, 13)
If IsDate(dt) Then
If DateDiff("m", dt, Now) > 3 then
F.delete
End If
End If
Next

NB : quand on supprime avec l'objet 'FileSystemObject' la méthode est
'DeleteFile' (pour la différencier de DeleteFolder), si c'est sur un
objet 'File' la méthode est 'Delete', d'où les deux types de codage
possibles, mais qui aboutissent au même résultat.


--------------------------------------------------------------------

2 - > "C:Documents and SettingsmicroApplication
> DataThunderbirdProfiles*.defaultprefs.js"

Je ne comprends pas ce que tu désires. Ce répertoire, s'il existe
supposerait l'existence d'un utilisateur nommé 'micro' ?

Alain Lebayle a écrit :
Bonsoir Jacques93

1 - En fait une fois que les fichiers sont copiés, il y a une
extension qui est une date, ils se trouvent dans le dossier
C:PREFS.JS, je souhaite que les fichiers de plus de 3 mois puissent
être supprimés automatiquement ceci afin d'alléger le dossier. Merci
pour la piste, mais malgré mes essais, je n'y arrive pas.

2 - Ta proc fonctionne admirablement bien, mais est-il possible
d'avoir également la version avec "micro" à la place de Appdata à
savoir :

"C:Documents and SettingsmicroApplication
DataThunderbirdProfiles*.defaultprefs.js"

Je t'assure que j'ai vraiment passé un temps fou à essayer de
décripter la procédure afin de la modifier mais y'a pas moyen.

Voilà la procédure définitive :

Merci
Alain

Dim wsh, fso
Dim ProfilesPath, fColl, f1
Dim Origine
Dim La_date
La_date = FormatDateTime(Now,1)


Set wsh = CreateObject( "WScript.Shell" )
set fso = CreateObject ("Scripting.FileSystemObject")

Set ProfilesPath = fso.GetFolder _
(wsh.ExpandEnvironmentStrings("%AppData%") & _
"ThunderbirdProfiles")

Set fColl = ProfilesPath.SubFolders
For Each f1 in fColl
If LCase(Right(f1.Name,8)) = ".default" then
Origine = ProfilesPath & "" & f1.Name & "" & "prefs.js"
End If
Next

'Pour vérifier si le dossier existe
if ( Fso.FolderExists( "C:PREFS.JS") ) then
'le dossier existe
else
'le dossier n'existe pas alors création
Fso.CreateFolder ("C:PREFS.JS")
end if

Copy Origine,"C:PREFS.JSprefs.js" & " du " & La_date

function copy(old_,new_)

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile old_, new_,true
end function

Set fso = Nothing
Set wsh = Nothing





Avatar
Alain Lebayle
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " & La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???

Alain

Jacques93 a écrit :

1 - Le format de date que tu intègre dans le nom de ton fichier n'est
pas adapté :

La_date = FormatDateTime(Now, 1)

génère, pour aujourd'hui : dimanche 11 avril 2010
ce n'est pas exploitable par DateDiff. Il vaudrait mieux utiliser

La_date = FormatDateTime(Now, 2)

qui génèrera la date sous la forme : 11/04/2010
Le nom de ton fichier sera donc : "prefs.js du 11/04/2010"
Il te suffira ensuite dans la procédure de suppression de récupérer
cette date avec :

dt = Mid (NomDuFichier, 13)
If DateDiff("m", dt, now) > 3 Then
fso.DeleteFile ...
...
End If

Et pour parcourir le répertoire C:PREFS.JS, la procédure que t'as
indiqué michdenis dans l'autre fil :

<Citation michdenis>

C ) Tu voulais savoir comment arriver à supprimer des fichiers à
partir d'un certain critère que tu avais mal défini dans ta
question initiale. Je t'ai donné un exemple. Cette procédure
supprime tous les fichiers du chemin du répertoire passé en
paramètre s'il s'est écoulé plus de 3 mois.
'-------------------------------------------
Sub Supprimer_Fichier_Plus_Vieux_Trois_Mois(Repertoire)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Rep = objFSO.GetFolder(Repertoire)
For Each F In Rep.files
If DateDiff("m", F.DateLastAccessed, Now) > 3 then
F.delete
End If
Next
Set objFSO = Nothing: Set Rep = Nothing: Set F = Nothing
End Sub

</Citation michdenis>

est parfaitement adaptée, en remplaçant F.DateLastAccessed par la
variable dt :

For Each F In Rep.files
dt = Mid (F.Name, 13)
If IsDate(dt) Then
If DateDiff("m", dt, Now) > 3 then
F.delete
End If
End If
Next

NB : quand on supprime avec l'objet 'FileSystemObject' la méthode est
'DeleteFile' (pour la différencier de DeleteFolder), si c'est sur un
objet 'File' la méthode est 'Delete', d'où les deux types de codage
possibles, mais qui aboutissent au même résultat.


--------------------------------------------------------------------

2 - > "C:Documents and SettingsmicroApplication
> DataThunderbirdProfiles*.defaultprefs.js"

Je ne comprends pas ce que tu désires. Ce répertoire, s'il existe
supposerait l'existence d'un utilisateur nommé 'micro' ?

Alain Lebayle a écrit :
Bonsoir Jacques93

1 - En fait une fois que les fichiers sont copiés, il y a une
extension qui est une date, ils se trouvent dans le dossier
C:PREFS.JS, je souhaite que les fichiers de plus de 3 mois puissent
être supprimés automatiquement ceci afin d'alléger le dossier. Merci
pour la piste, mais malgré mes essais, je n'y arrive pas.

2 - Ta proc fonctionne admirablement bien, mais est-il possible
d'avoir également la version avec "micro" à la place de Appdata à
savoir :

"C:Documents and SettingsmicroApplication
DataThunderbirdProfiles*.defaultprefs.js"

Je t'assure que j'ai vraiment passé un temps fou à essayer de
décripter la procédure afin de la modifier mais y'a pas moyen.

Voilà la procédure définitive :

Merci
Alain

Dim wsh, fso
Dim ProfilesPath, fColl, f1
Dim Origine
Dim La_date
La_date = FormatDateTime(Now,1)


Set wsh = CreateObject( "WScript.Shell" )
set fso = CreateObject ("Scripting.FileSystemObject")

Set ProfilesPath = fso.GetFolder _
(wsh.ExpandEnvironmentStrings("%AppData%") & _
"ThunderbirdProfiles")

Set fColl = ProfilesPath.SubFolders
For Each f1 in fColl
If LCase(Right(f1.Name,8)) = ".default" then
Origine = ProfilesPath & "" & f1.Name & "" & "prefs.js"
End If
Next

'Pour vérifier si le dossier existe
if ( Fso.FolderExists( "C:PREFS.JS") ) then
'le dossier existe
else
'le dossier n'existe pas alors création
Fso.CreateFolder ("C:PREFS.JS")
end if

Copy Origine,"C:PREFS.JSprefs.js" & " du " & La_date

function copy(old_,new_)

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile old_, new_,true
end function

Set fso = Nothing
Set wsh = Nothing





Avatar
michdenis
Les caractères suivants sont interdits dans la nomination
d'un répertoire : / * ? | " < > :

Si dans ton panneau de configuration tu as "/" comme
séparateur de date, tu as un problème avec ceci :
La_date = FormatDateTime(Now, 2)

Une alternative :
La_date = Day(Now) & "-" & Month(Now) & "-" & Year(Now())



"Alain Lebayle" a écrit dans le message de groupe de
discussion : ek$
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " & La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???

Alain

Jacques93 a écrit :

1 - Le format de date que tu intègre dans le nom de ton fichier n'est
pas adapté :

La_date = FormatDateTime(Now, 1)

génère, pour aujourd'hui : dimanche 11 avril 2010
ce n'est pas exploitable par DateDiff. Il vaudrait mieux utiliser

La_date = FormatDateTime(Now, 2)

qui génèrera la date sous la forme : 11/04/2010
Le nom de ton fichier sera donc : "prefs.js du 11/04/2010"
Il te suffira ensuite dans la procédure de suppression de récupérer
cette date avec :

dt = Mid (NomDuFichier, 13)
If DateDiff("m", dt, now) > 3 Then
fso.DeleteFile ...
...
End If

Et pour parcourir le répertoire C:PREFS.JS, la procédure que t'as
indiqué michdenis dans l'autre fil :

<Citation michdenis>

C ) Tu voulais savoir comment arriver à supprimer des fichiers à
partir d'un certain critère que tu avais mal défini dans ta
question initiale. Je t'ai donné un exemple. Cette procédure
supprime tous les fichiers du chemin du répertoire passé en
paramètre s'il s'est écoulé plus de 3 mois.
'-------------------------------------------
Sub Supprimer_Fichier_Plus_Vieux_Trois_Mois(Repertoire)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Rep = objFSO.GetFolder(Repertoire)
For Each F In Rep.files
If DateDiff("m", F.DateLastAccessed, Now) > 3 then
F.delete
End If
Next
Set objFSO = Nothing: Set Rep = Nothing: Set F = Nothing
End Sub

</Citation michdenis>

est parfaitement adaptée, en remplaçant F.DateLastAccessed par la
variable dt :

For Each F In Rep.files
dt = Mid (F.Name, 13)
If IsDate(dt) Then
If DateDiff("m", dt, Now) > 3 then
F.delete
End If
End If
Next

NB : quand on supprime avec l'objet 'FileSystemObject' la méthode est
'DeleteFile' (pour la différencier de DeleteFolder), si c'est sur un
objet 'File' la méthode est 'Delete', d'où les deux types de codage
possibles, mais qui aboutissent au même résultat.


--------------------------------------------------------------------

2 - > "C:Documents and SettingsmicroApplication
> DataThunderbirdProfiles*.defaultprefs.js"

Je ne comprends pas ce que tu désires. Ce répertoire, s'il existe
supposerait l'existence d'un utilisateur nommé 'micro' ?

Alain Lebayle a écrit :
Bonsoir Jacques93

1 - En fait une fois que les fichiers sont copiés, il y a une
extension qui est une date, ils se trouvent dans le dossier
C:PREFS.JS, je souhaite que les fichiers de plus de 3 mois puissent
être supprimés automatiquement ceci afin d'alléger le dossier. Merci
pour la piste, mais malgré mes essais, je n'y arrive pas.

2 - Ta proc fonctionne admirablement bien, mais est-il possible
d'avoir également la version avec "micro" à la place de Appdata à
savoir :

"C:Documents and SettingsmicroApplication
DataThunderbirdProfiles*.defaultprefs.js"

Je t'assure que j'ai vraiment passé un temps fou à essayer de
décripter la procédure afin de la modifier mais y'a pas moyen.

Voilà la procédure définitive :

Merci
Alain

Dim wsh, fso
Dim ProfilesPath, fColl, f1
Dim Origine
Dim La_date
La_date = FormatDateTime(Now,1)


Set wsh = CreateObject( "WScript.Shell" )
set fso = CreateObject ("Scripting.FileSystemObject")

Set ProfilesPath = fso.GetFolder _
(wsh.ExpandEnvironmentStrings("%AppData%") & _
"ThunderbirdProfiles")

Set fColl = ProfilesPath.SubFolders
For Each f1 in fColl
If LCase(Right(f1.Name,8)) = ".default" then
Origine = ProfilesPath & "" & f1.Name & "" & "prefs.js"
End If
Next

'Pour vérifier si le dossier existe
if ( Fso.FolderExists( "C:PREFS.JS") ) then
'le dossier existe
else
'le dossier n'existe pas alors création
Fso.CreateFolder ("C:PREFS.JS")
end if

Copy Origine,"C:PREFS.JSprefs.js" & " du " & La_date

function copy(old_,new_)

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile old_, new_,true
end function

Set fso = Nothing
Set wsh = Nothing





Avatar
Alain Lebayle
Bonjour Michdenis,
Encore une fois, c'est tout simplement parfait !!!
Bravo et merci
Alain

michdenis a écrit :
Les caractères suivants sont interdits dans la nomination
d'un répertoire : / * ? | " < > :

Si dans ton panneau de configuration tu as "/" comme
séparateur de date, tu as un problème avec ceci :
La_date = FormatDateTime(Now, 2)

Une alternative :
La_date = Day(Now) & "-" & Month(Now) & "-" & Year(Now())



"Alain Lebayle" a écrit dans le message de groupe de
discussion : ek$
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " & La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???

Alain

Jacques93 a écrit :
1 - Le format de date que tu intègre dans le nom de ton fichier n'est
pas adapté :

La_date = FormatDateTime(Now, 1)

génère, pour aujourd'hui : dimanche 11 avril 2010
ce n'est pas exploitable par DateDiff. Il vaudrait mieux utiliser

La_date = FormatDateTime(Now, 2)

qui génèrera la date sous la forme : 11/04/2010
Le nom de ton fichier sera donc : "prefs.js du 11/04/2010"
Il te suffira ensuite dans la procédure de suppression de récupérer
cette date avec :

dt = Mid (NomDuFichier, 13)
If DateDiff("m", dt, now) > 3 Then
fso.DeleteFile ...
...
End If

Et pour parcourir le répertoire C:PREFS.JS, la procédure que t'as
indiqué michdenis dans l'autre fil :

<Citation michdenis>

C ) Tu voulais savoir comment arriver à supprimer des fichiers à
partir d'un certain critère que tu avais mal défini dans ta
question initiale. Je t'ai donné un exemple. Cette procédure
supprime tous les fichiers du chemin du répertoire passé en
paramètre s'il s'est écoulé plus de 3 mois.
'-------------------------------------------
Sub Supprimer_Fichier_Plus_Vieux_Trois_Mois(Repertoire)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Rep = objFSO.GetFolder(Repertoire)
For Each F In Rep.files
If DateDiff("m", F.DateLastAccessed, Now) > 3 then
F.delete
End If
Next
Set objFSO = Nothing: Set Rep = Nothing: Set F = Nothing
End Sub

</Citation michdenis>

est parfaitement adaptée, en remplaçant F.DateLastAccessed par la
variable dt :

For Each F In Rep.files
dt = Mid (F.Name, 13)
If IsDate(dt) Then
If DateDiff("m", dt, Now) > 3 then
F.delete
End If
End If
Next

NB : quand on supprime avec l'objet 'FileSystemObject' la méthode est
'DeleteFile' (pour la différencier de DeleteFolder), si c'est sur un
objet 'File' la méthode est 'Delete', d'où les deux types de codage
possibles, mais qui aboutissent au même résultat.


--------------------------------------------------------------------

2 - > "C:Documents and SettingsmicroApplication
> DataThunderbirdProfiles*.defaultprefs.js"

Je ne comprends pas ce que tu désires. Ce répertoire, s'il existe
supposerait l'existence d'un utilisateur nommé 'micro' ?

Alain Lebayle a écrit :
Bonsoir Jacques93

1 - En fait une fois que les fichiers sont copiés, il y a une
extension qui est une date, ils se trouvent dans le dossier
C:PREFS.JS, je souhaite que les fichiers de plus de 3 mois puissent
être supprimés automatiquement ceci afin d'alléger le dossier. Merci
pour la piste, mais malgré mes essais, je n'y arrive pas.

2 - Ta proc fonctionne admirablement bien, mais est-il possible
d'avoir également la version avec "micro" à la place de Appdata à
savoir :

"C:Documents and SettingsmicroApplication
DataThunderbirdProfiles*.defaultprefs.js"

Je t'assure que j'ai vraiment passé un temps fou à essayer de
décripter la procédure afin de la modifier mais y'a pas moyen.

Voilà la procédure définitive :

Merci
Alain

Dim wsh, fso
Dim ProfilesPath, fColl, f1
Dim Origine
Dim La_date
La_date = FormatDateTime(Now,1)


Set wsh = CreateObject( "WScript.Shell" )
set fso = CreateObject ("Scripting.FileSystemObject")

Set ProfilesPath = fso.GetFolder _
(wsh.ExpandEnvironmentStrings("%AppData%") & _
"ThunderbirdProfiles")

Set fColl = ProfilesPath.SubFolders
For Each f1 in fColl
If LCase(Right(f1.Name,8)) = ".default" then
Origine = ProfilesPath & "" & f1.Name & "" & "prefs.js"
End If
Next

'Pour vérifier si le dossier existe
if ( Fso.FolderExists( "C:PREFS.JS") ) then
'le dossier existe
else
'le dossier n'existe pas alors création
Fso.CreateFolder ("C:PREFS.JS")
end if

Copy Origine,"C:PREFS.JSprefs.js" & " du " & La_date

function copy(old_,new_)

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile old_, new_,true
end function

Set fso = Nothing
Set wsh = Nothing


Avatar
Jacques93
Oui, effectivement, ça m'apprendra à ne pas tester ...
'/' est un caractère interdit dans les noms de fichier, ainsi que :

: * ? " < > |

Avant la copie il faut donc le remplacer par '_' par exemple :

La_date = Replace(La_date, "/", "_")

et lors du nettoyage de ton répertoire destination, faire l'inverse afin
que DateDiff 'voit' bien une date :

dt = Replace(dt, "_", "/")
If DateDiff ("m", dt,Now) ...

Alain Lebayle a écrit :
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " & La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???




--

Cordialement,

Jacques.
Avatar
Alain Lebayle
Bonsoir,
Décidément, je ne dois pas être vraiment doué, mais bon, ça je le savais ;-)
Voilà, un vraiment très long moment que je m'échine à essayer de faire
fonctionner cette procédure, j'ai beaucoup de mal à adapter sachant que
le dossier est "C:PREFS_JS"
Alain

Jacques93 a écrit :
Oui, effectivement, ça m'apprendra à ne pas tester ...
'/' est un caractère interdit dans les noms de fichier, ainsi que :

: * ? " < > |

Avant la copie il faut donc le remplacer par '_' par exemple :

La_date = Replace(La_date, "/", "_")

et lors du nettoyage de ton répertoire destination, faire l'inverse afin
que DateDiff 'voit' bien une date :

dt = Replace(dt, "_", "/")
If DateDiff ("m", dt,Now) ...

Alain Lebayle a écrit :
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " &
La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???




Avatar
Alain Lebayle
Bonjour,
Tout est OK, cela marche parfaitement !
Un très grand merci à tous, notament
Michdenis, Jacques93, At, Daniel C...
Très bonne journée
Alain

Alain Lebayle a écrit :
Bonsoir,
Décidément, je ne dois pas être vraiment doué, mais bon, ça je le savais
;-)
Voilà, un vraiment très long moment que je m'échine à essayer de faire
fonctionner cette procédure, j'ai beaucoup de mal à adapter sachant que
le dossier est "C:PREFS_JS"
Alain

Jacques93 a écrit :
Oui, effectivement, ça m'apprendra à ne pas tester ...
'/' est un caractère interdit dans les noms de fichier, ainsi que :

: * ? " < > |

Avant la copie il faut donc le remplacer par '_' par exemple :

La_date = Replace(La_date, "/", "_")

et lors du nettoyage de ton répertoire destination, faire l'inverse
afin que DateDiff 'voit' bien une date :

dt = Replace(dt, "_", "/")
If DateDiff ("m", dt,Now) ...

Alain Lebayle a écrit :
Bonjour Jacques93,
Le problème est que le format date "La_date = FormatDateTime(Now, 2)"
refuse la copy soit "Copy Origine,"C:PREFS_JSprefs.js" & " du " &
La_date

alors qu'avec "La_date = FormatDateTime(Now, 1)" il accepte la copie ???




1 2