existe t'il une instruction VBA permettant de supprimer un dossier non
vide ?
J'ai bien trouvé un truc en VBScript, mais je voulais savoir si ça n'est
pas possible directement en VBA.
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
NB : le dossier peut contenir des fichiers ET des dossiers etc etc.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Cet objet "Scripting.FileSystemObject" est souvent utilisé par plusieurs en VBA pour manipuler fichiers et répertoires.
Il appartient à la bibliothèque suivante : "Microsoft Scripting Runtime" que tu peux cocher dans la fenêtre VBA Outils / références /
Lorsque cette bibliothèque est coché, tu peux définir les variables directement comme ceci :
Dim Fld As Folder Dim Fichier As File Dim FS As Scripting.FileSystemObject
Sinon, tu fais comme cela
Dim Fld As Object Dim Fichier As Object Dim FS As Object
Tu peux aussi utiliser cette ligne de code: Elle supprime tous les fichiers du répertoire et le répertoire lui-même y compris les sous-répertoires et leurs fichiers.
Le paramètre Q rend l'opération silencieuse, aucune demande n'est faite à l'usager pour effectuer cette tâche.
'------------------------- Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersMichDDocumentsTest"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub '-------------------------
Bonjour,
Cet objet "Scripting.FileSystemObject" est souvent utilisé par plusieurs
en VBA pour manipuler fichiers et répertoires.
Il appartient à la bibliothèque suivante :
"Microsoft Scripting Runtime" que tu peux cocher dans la fenêtre VBA
Outils / références /
Lorsque cette bibliothèque est coché, tu peux définir les variables
directement comme ceci :
Dim Fld As Folder
Dim Fichier As File
Dim FS As Scripting.FileSystemObject
Sinon, tu fais comme cela
Dim Fld As Object
Dim Fichier As Object
Dim FS As Object
Tu peux aussi utiliser cette ligne de code:
Elle supprime tous les fichiers du répertoire et le répertoire lui-même
y compris les sous-répertoires et leurs fichiers.
Le paramètre Q rend l'opération silencieuse, aucune demande n'est faite
à l'usager pour effectuer cette tâche.
'-------------------------
Sub test()
Dim Répertoire As String, Commande As String
Répertoire = "c:UsersMichDDocumentsTest"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire
Shell Commande, 0
End Sub
'-------------------------
Cet objet "Scripting.FileSystemObject" est souvent utilisé par plusieurs en VBA pour manipuler fichiers et répertoires.
Il appartient à la bibliothèque suivante : "Microsoft Scripting Runtime" que tu peux cocher dans la fenêtre VBA Outils / références /
Lorsque cette bibliothèque est coché, tu peux définir les variables directement comme ceci :
Dim Fld As Folder Dim Fichier As File Dim FS As Scripting.FileSystemObject
Sinon, tu fais comme cela
Dim Fld As Object Dim Fichier As Object Dim FS As Object
Tu peux aussi utiliser cette ligne de code: Elle supprime tous les fichiers du répertoire et le répertoire lui-même y compris les sous-répertoires et leurs fichiers.
Le paramètre Q rend l'opération silencieuse, aucune demande n'est faite à l'usager pour effectuer cette tâche.
'------------------------- Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersMichDDocumentsTest"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub '-------------------------
MichD
En supplément,
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide, tu dois utiliser une boucle pour supprimer tous les fichiers qu'il contient. Il ne doit contenir de répertoire non plus!
'------------------------------------ Sub Test1() Dim Répertoire As String, Fichier As String Répertoire = "c:UsersMichDDocumentsTest"
Fichier = Dir(Répertoire & "*.*")
Do While Fichier <> "" 'supprime le fichier VBA.FileSystem.Kill Répertoire & Fichier Fichier = Dir() Loop 'Supprime le répertoire VBA.RmDir Répertoire End Sub
'------------------------------------
En supplément,
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide, tu dois utiliser une
boucle pour supprimer tous les fichiers qu'il contient. Il ne doit
contenir de répertoire non plus!
'------------------------------------
Sub Test1()
Dim Répertoire As String, Fichier As String
Répertoire = "c:UsersMichDDocumentsTest"
Fichier = Dir(Répertoire & "*.*")
Do While Fichier <> ""
'supprime le fichier
VBA.FileSystem.Kill Répertoire & Fichier
Fichier = Dir()
Loop
'Supprime le répertoire
VBA.RmDir Répertoire
End Sub
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide, tu dois utiliser une boucle pour supprimer tous les fichiers qu'il contient. Il ne doit contenir de répertoire non plus!
'------------------------------------ Sub Test1() Dim Répertoire As String, Fichier As String Répertoire = "c:UsersMichDDocumentsTest"
Fichier = Dir(Répertoire & "*.*")
Do While Fichier <> "" 'supprime le fichier VBA.FileSystem.Kill Répertoire & Fichier Fichier = Dir() Loop 'Supprime le répertoire VBA.RmDir Répertoire End Sub
'------------------------------------
JièL
Le 19/05/2016 à 17:17, MichD a écrit :
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
-- JièL simpliste
Le 19/05/2016 à 17:17, MichD a écrit :
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
Directement dans le modèle objet VBA, tu as cette ligne de commande :
VBA.FileSystem.RmDir Répertoire
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
-- JièL simpliste
isabelle
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi
et très silencieux,
et il fonctionne sans référence à une bibliothèque
Sub test()
Dim Répertoire As String, Commande As String
Répertoire = "c:UsersisabelleDocumentsTest1"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire
Shell Commande, 0
End Sub
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
JièL
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
-- JièL Shell, Antar, Esso etc etc
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi
et très silencieux,
et il fonctionne sans référence à une bibliothèque
Sub test()
Dim Répertoire As String, Commande As String
Répertoire = "c:UsersisabelleDocumentsTest1"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire
Shell Commande, 0
End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux
pas me servir du shell
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
-- JièL Shell, Antar, Esso etc etc
HB
Bonsoir,
Dans certains cas, avec des chemins trop longs, RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue. J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs), cet outil est définitivement revenu avec W7 et est présent depuis sur les OS microsoft qui suivirent. (y compris W10)
Voici la fonction que j'utilise dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier) Dim objFSO, objFolder, VIDE, oSh, COMMANDE VIDE = "c:TempVide" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.CreateFolder(VIDE) Set oSh = CreateObject ("WScript.Shell") COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR" oSh.Run COMMANDE,0,true Set oSh = Nothing objFSO.deletefolder VIDE,True Set objFSO = Nothing End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Bonsoir,
Dans certains cas, avec des chemins trop longs,
RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue.
J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien
les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs),
cet outil est définitivement revenu avec W7 et
est présent depuis sur les OS microsoft qui suivirent.
(y compris W10)
Voici la fonction que j'utilise
dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier)
Dim objFSO, objFolder, VIDE, oSh, COMMANDE
VIDE = "c:TempVide"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.CreateFolder(VIDE)
Set oSh = CreateObject ("WScript.Shell")
COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR"
oSh.Run COMMANDE,0,true
Set oSh = Nothing
objFSO.deletefolder VIDE,True
Set objFSO = Nothing
End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi
et très silencieux,
et il fonctionne sans référence à une bibliothèque
Sub test()
Dim Répertoire As String, Commande As String
Répertoire = "c:UsersisabelleDocumentsTest1"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire
Shell Commande, 0
End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux
pas me servir du shell
Merci
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Dans certains cas, avec des chemins trop longs, RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue. J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs), cet outil est définitivement revenu avec W7 et est présent depuis sur les OS microsoft qui suivirent. (y compris W10)
Voici la fonction que j'utilise dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier) Dim objFSO, objFolder, VIDE, oSh, COMMANDE VIDE = "c:TempVide" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.CreateFolder(VIDE) Set oSh = CreateObject ("WScript.Shell") COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR" oSh.Run COMMANDE,0,true Set oSh = Nothing objFSO.deletefolder VIDE,True Set objFSO = Nothing End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
HB
Petites précisions :
1) Ce que j'ai nommé "nom trop long" correspond à un chemin complet ayant plus de 255 caractères. 1) Ces pb proviennent rarement du nom du dossier à vider mais de certains fichiers contenus qqpart à l'intérieur.
2) On peut par ailleurs obtenir le "nom court" (en script de commandes avec %~FSA si %A contient le chemin d'origine) mais cela n'a aucun rapport. pour donner le nom court, le système ne doit pas avoir de pb avec le nom complet...
3) Ces problèmes de longueur sont assez fréquent dans les réseaux : Soit un utilisateur AZERTY qui possède un espace perso dans D:UtilisatSectionHSsChefsAZERTY sur un serveur; Pour lui, ce partage est mappé avec la lettre P:
S'il y stocke un truc avec un chemin complet de 250 caractères (par exemple) il n'a pas de problème. C'est assez fréquent lorsque les gens enregistrent un truc (mail, document téléchargé sur le web, ...) sans adapter le nom de fichier de façon raisonnable.
Le serveur voit un chemin bien plus long et, du coup, certains outils échouent ... (dont le VBS) ... pas robocopy.
( https://support.microsoft.com/fr-fr/kb/2891362 Je n'ai pas encore utilisé ce correctif puisqu'il semble annoncé comme expérimental. )
Cordialement,
HB
Le 20/05/2016 à 23:43, HB a écrit :
Bonsoir,
Dans certains cas, avec des chemins trop longs, RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue. J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs), cet outil est définitivement revenu avec W7 et est présent depuis sur les OS microsoft qui suivirent. (y compris W10)
Voici la fonction que j'utilise dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier) Dim objFSO, objFolder, VIDE, oSh, COMMANDE VIDE = "c:TempVide" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.CreateFolder(VIDE) Set oSh = CreateObject ("WScript.Shell") COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR" oSh.Run COMMANDE,0,true Set oSh = Nothing objFSO.deletefolder VIDE,True Set objFSO = Nothing End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Petites précisions :
1) Ce que j'ai nommé "nom trop long" correspond à un chemin complet
ayant plus de 255 caractères.
1) Ces pb proviennent rarement du nom du dossier à vider mais de
certains fichiers contenus qqpart à l'intérieur.
2) On peut par ailleurs obtenir le "nom court" (en script de commandes
avec %~FSA si %A contient le chemin d'origine) mais cela n'a aucun
rapport. pour donner le nom court, le système ne doit pas avoir de pb
avec le nom complet...
3) Ces problèmes de longueur sont assez fréquent dans les réseaux :
Soit un utilisateur AZERTY qui possède un espace perso dans
D:UtilisatSectionHSsChefsAZERTY sur un serveur;
Pour lui, ce partage est mappé avec la lettre P:
S'il y stocke un truc avec un chemin complet de 250 caractères (par
exemple) il n'a pas de problème.
C'est assez fréquent lorsque les gens enregistrent un truc (mail,
document téléchargé sur le web, ...) sans adapter le nom de fichier de
façon raisonnable.
Le serveur voit un chemin bien plus long et, du coup, certains outils
échouent ... (dont le VBS) ... pas robocopy.
( https://support.microsoft.com/fr-fr/kb/2891362
Je n'ai pas encore utilisé ce correctif
puisqu'il semble annoncé comme expérimental. )
Cordialement,
HB
Le 20/05/2016 à 23:43, HB a écrit :
Bonsoir,
Dans certains cas, avec des chemins trop longs,
RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue.
J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien
les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs),
cet outil est définitivement revenu avec W7 et
est présent depuis sur les OS microsoft qui suivirent.
(y compris W10)
Voici la fonction que j'utilise
dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier)
Dim objFSO, objFolder, VIDE, oSh, COMMANDE
VIDE = "c:TempVide"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.CreateFolder(VIDE)
Set oSh = CreateObject ("WScript.Shell")
COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR"
oSh.Run COMMANDE,0,true
Set oSh = Nothing
objFSO.deletefolder VIDE,True
Set objFSO = Nothing
End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi
et très silencieux,
et il fonctionne sans référence à une bibliothèque
Sub test()
Dim Répertoire As String, Commande As String
Répertoire = "c:UsersisabelleDocumentsTest1"
Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire
Shell Commande, 0
End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux
pas me servir du shell
Merci
---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
https://www.avast.com/antivirus
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
1) Ce que j'ai nommé "nom trop long" correspond à un chemin complet ayant plus de 255 caractères. 1) Ces pb proviennent rarement du nom du dossier à vider mais de certains fichiers contenus qqpart à l'intérieur.
2) On peut par ailleurs obtenir le "nom court" (en script de commandes avec %~FSA si %A contient le chemin d'origine) mais cela n'a aucun rapport. pour donner le nom court, le système ne doit pas avoir de pb avec le nom complet...
3) Ces problèmes de longueur sont assez fréquent dans les réseaux : Soit un utilisateur AZERTY qui possède un espace perso dans D:UtilisatSectionHSsChefsAZERTY sur un serveur; Pour lui, ce partage est mappé avec la lettre P:
S'il y stocke un truc avec un chemin complet de 250 caractères (par exemple) il n'a pas de problème. C'est assez fréquent lorsque les gens enregistrent un truc (mail, document téléchargé sur le web, ...) sans adapter le nom de fichier de façon raisonnable.
Le serveur voit un chemin bien plus long et, du coup, certains outils échouent ... (dont le VBS) ... pas robocopy.
( https://support.microsoft.com/fr-fr/kb/2891362 Je n'ai pas encore utilisé ce correctif puisqu'il semble annoncé comme expérimental. )
Cordialement,
HB
Le 20/05/2016 à 23:43, HB a écrit :
Bonsoir,
Dans certains cas, avec des chemins trop longs, RD (cmd) et la méthode DeleteFolder du FSO (vb vbs vba) échoue. J'en ai fait l'amère expérience ...
Depuis, j'utilise Robocopy qui tolère très très bien les chemins très très long.
Absent sur XP (mais souvent rajouté par les utilisateurs), cet outil est définitivement revenu avec W7 et est présent depuis sur les OS microsoft qui suivirent. (y compris W10)
Voici la fonction que j'utilise dans mes scripts d'administration écrits en VBS.
Sa transcription dans VBA ne pose aucun problème.
Function EffaceDossier(NomDossier) Dim objFSO, objFolder, VIDE, oSh, COMMANDE VIDE = "c:TempVide" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.CreateFolder(VIDE) Set oSh = CreateObject ("WScript.Shell") COMMANDE = "Robocopy.exe " & VIDE & " "& NomDossier & " /MIR" oSh.Run COMMANDE,0,true Set oSh = Nothing objFSO.deletefolder VIDE,True Set objFSO = Nothing End Function
Le 20/05/2016 à 09:52, JièL a écrit :
Le 20/05/2016 à 01:42, isabelle a écrit :
Le 2016-05-19 16:49, JièL a écrit :
Le hic, c'est que ce répertoire doit être vide,
OK, merci, j'en reste donc au Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder (Dossier_A_Supprimer), True
c'est finalement plus simple.
ce code est très simple aussi et très silencieux, et il fonctionne sans référence à une bibliothèque
Sub test() Dim Répertoire As String, Commande As String Répertoire = "c:UsersisabelleDocumentsTest1" Commande = Environ("comspec") & " /c RD /S /Q " & Répertoire Shell Commande, 0 End Sub
isabelle
Voui, j'avais vu aussi, mais pour une raison particulière, je ne peux pas me servir du shell
Merci
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus