Aller au contenu

[RÉSOLU] Petit script de création de dossier


percubabs

Messages recommandés

bonjour j'ai une arborescence de type

e:\sociétés\"nom1"\juridique\

--------------\"nom2"\juridique\

--------------etc

j'aimerais parcourir les sociétés et si il y a le dossier juridique, créer dedans deux dossier A et B.

j'arriver à créer les deux dossier, mais je n'arrive pas à parcourir toutes les sociétés pour voir si juridique y est.

merci de votre aide.

voila où j'en suis.

f oFSO.FolderExists(stRep) ThenFor each oFld in  oFSO.GetFolder(stRep).SubFolders'on vérifie que le répertoire existeIf oFld.Name = "Juridique" then Wscript.Echo oFld.Name Set oFld=oFSO.GetFolder (stRep & "\Juridique") 'Création de répertoire oFld.subFolders.Add("Social") oFld.subFolders.Add("Société")end ifNextEnd If

merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Salut percubabs,

je ne connais pas du tout ce langage de script...

As-tu essayé d'utiliser une autre variable pour ton "set" que celle de ton for each (oFld) ?

C'est peut-être complètement stupide comme test (ça devrait l'être, stupide, vu que tu fais bien un next suite à ton if... le for each va alors ré-attribuer une autre valeur à "oFld" qui correspond à un nouveau dossier "société" de ton arborescence)... Mais vu que tu n'arrives pas à parcourir toutes les sociétés, j'imagine que tu sors du "for each".

T'es-tu assuré sinon que ton for each sans son contenu tel que tu le présentes ici, retourne bien tous les sous-dossiers de "stRep" (en les affichant par exemple) ?

Lien vers le commentaire
Partager sur d’autres sites

Un truc comme ça, non ?

//Test existence et parcours du dossier e:\société\if oFSO.FolderExists(stRep) Thenfor each fSociete in oFSO.GetFolder(stRep).SubFolders	//On traite ici chaque dossier représentant une société"	 Wscript.Echo fSociete.Name	 for each unDossier  in  oFSO.GetFolder(stRep & "\" & fSociete.Name).SubFolders		 //On traite ici le contenu du dossier d'une société"		 //Est ce que le dossier juridique existe ?"		 If unDossier.Name = "Juridique" then			  Set fJuridique=oFSO.GetFolder (stRep & "\" & fSociete.Name & "\Juridique")                 //Création de répertoire			  fJuridique.subFolders.Add("Social")			  fJuridique.subFolders.Add("Société")		 end if	 next nextend if
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour !!

bon je galère tjrs. Il doit y avoir un grosse boulette dans mon code!

voila où j'en suis

Dim stRepDim oFSO,oFldSet oFSO = CreateObject("Scripting.FileSystemObject")stRep = "E:\SOCIETE\"if oFSO.FolderExists(stRep) Then	for each fSociete in oFSO.GetFolder(stRep).SubFolders			 Wscript.Echo fSociete.Name			 for each unDossier  in  oFSO.GetFolder(stRep & "\" & fSociete.Name).SubFolders					 If unDossier.Name = "Juridique" then							  Set fJuridique=oFSO.GetFolder (stRep & "\" & fSociete.Name & "\Juridique!")							  fJuridique.subFolders.Add("Social")							  fJuridique.subFolders.Add("Société")					 end if			 next	 nextend if

il ne manque pas des déclarations?

Petite chose aussi Si les dossier Social et Société existe déjà dans juridique il ne faut pas les créer.

Lien vers le commentaire
Partager sur d’autres sites

Bin, c'est le même principe !

if NOT path.FolderExists("social") Then   //creation du dossier socialend ifif NOT path.FolderExists("société") Then   //creation du dossier sociétéend if

Il faut toujours préférer cette solution à un "IF le dossier existe ALORS je ne fais rien SINON je le créer". Le "je ne fais rien", c'est un "if" vide, c'est juste horrible !

C'est beaucoup plus propre de faire un "IF le dossier n'existe pas ALORS je le créer" (c'est plus court, plus compréhensible).

Tu es d'accord avec ça ?

Lien vers le commentaire
Partager sur d’autres sites

A la base j'aurais fait l’inverse mais ta solution est bonne ! je test cela de suite

il essaie de créer même si le dossier existe déjà

Dim pathDim stRepDim oFSO,oFldSet oFSO = CreateObject("Scripting.FileSystemObject")stRep = "E:\SOCIETE"if oFSO.FolderExists(stRep) Thenfor each fSociete in oFSO.GetFolder(stRep).SubFolders							 Wscript.Echo fSociete.Name	for each unDossier  in  oFSO.GetFolder(stRep & "\" & fSociete.Name).SubFolders		If unDossier.Name = "Juridique" then			Set fJuridique=oFSO.GetFolder (stRep & "\" & fSociete.Name & "\Juridique")		if not path.FolderExists("Social") Then			 fJuridique.subFolders.Add("Social")		end if if not path.FolderExists("Société") Then  fJuridique.subFolders.Add("Société") end if		end if	nextnextend if
Lien vers le commentaire
Partager sur d’autres sites

Comment ça tu aurais fais l'inverse ? Un "IF le dossier existe ALORS je ne fais rien SINON je le créer" ?! Crois-moi, ça c'est vraiment pas du joli code...

Fais attention quand même... tu recopies beaucoup ce que je te dis mais tu n'y réfléchies pas trop :non: . Tu as déclaré la variable "path" mais est-elle définie (a-t-elle une valeur) ? Je ne crois pas... Comme elle pointe vers "rien", le dossier Social ou Société n'y existe pas, alors ton script le créé. Logique.

Tu es presque au bout, encore un peu de courage !

Lien vers le commentaire
Partager sur d’autres sites

c'est vrai je recopie beaucoup mais je n'ai pas eu de formation VBScript et je n'ai que de de maigre base en C donc .... je viens à peine de commencer a voir les objets.

j'ai bien comprit mon erreur et je te remercie beaucoup pour ton aide.

Mais je ne vois pas quoi le caler en paramètre

apparemment je n'ai pas le droit de faire ceci

path = "stRep & "\" & fSociete.Name & "\Juridique"
Lien vers le commentaire
Partager sur d’autres sites

Oui, je dis ça moi.. t'inquiète pas, ça va venir. Je me souviens qu'au début, je galérais pas mal également :)

J'ai jamais touché au VBScript non plus, je le découvre avec ce topic.

On est bien d'accord que ce que tu peux faire pour régler ton dernier soucis, c'est la même chose que ce que tu fais au début :

Set oFSO = CreateObject("Scripting.FileSystemObject")stRep = "E:\SOCIETE"if oFSO.FolderExists(stRep) Then....

Par contre ici, on va préférer un "IF NOT" (si ça n'existe pas, je le créé).

Ce qui te coince là c'est la concaténation de chaîne de caractère (je crois qu'il y a un guillemet de trop, celui après le signe égale), mais l'idée est là. Tu vas t'orienter vers un truc comme ça :

folder = stRep & "\" & fSociete.Name & "\Juridique\social"if not oFSO.FolderExists(folder) Then  //creation du dossier social. Il faut faire attention a bien être au bon endroitend if//faire pareil avec le dossier Societe

Je n'ai rien pour tester hein, j'écris tout ça sans savoir si ça fonctionne...

Pense à me copier les erreurs que le script te retourne.

Lien vers le commentaire
Partager sur d’autres sites

objet requis e:\société\nom 1\Juridique

ligne if not

Dim pathDim stRepDim oFSO,oFldSet oFSO = CreateObject("Scripting.FileSystemObject")stRep = "E:\SOCIETE"if oFSO.FolderExists(stRep) Thenfor each fSociete in oFSO.GetFolder(stRep).SubFolders							 Wscript.Echo fSociete.Name	for each unDossier  in  oFSO.GetFolder(stRep & "\" & fSociete.Name).SubFolders		If unDossier.Name = "Juridique" then  path = stRep & "\" & fSociete.Name & "\Juridique"			Set fJuridique=oFSO.GetFolder (stRep & "\" & fSociete.Name & "\Juridique")  if not path.FolderExists("Social") Then  fJuridique.subFolders.Add("Social") end if if not path.FolderExists("Société") Then  fJuridique.subFolders.Add("Société") end if		end if	nextnextend if
Lien vers le commentaire
Partager sur d’autres sites

Oui ! Logique !

Ici, "path", n'est pas un objet mais bien une chaîne de caractère : tu ne peux donc pas y appliquer la méthode "FolderExists" qui requière un objet du type "FileSystemObject".

Regarde bien comme tu as fais au tout début de ton script, c'est exactement pareil !

Regarde également bien le code que j'ai écris dans mon précédent message, je t'ai donné la réponse en fait...

Là, je te fais tout, c'est pas utile ! D'autant que tu sais faire, tu l'as déjà fait !

Garde en tête :

- la fonction FolderExists prend en paramètre une chaîne de caractère (le chemin vers le dossier dont tu veux tester l'existence)

- elle s'applique sur un object "FileSystemObject", pas une chaîne de caractère

Lien vers le commentaire
Partager sur d’autres sites

ok c'est bon

Dim pathDim stRepDim oFSO,oFldSet oFSO = CreateObject("Scripting.FileSystemObject")stRep = "E:\SOCIETE"if oFSO.FolderExists(stRep) Thenfor each fSociete in oFSO.GetFolder(stRep).SubFolders							 Wscript.Echo fSociete.Name	for each unDossier  in  oFSO.GetFolder(stRep & "\" & fSociete.Name).SubFolders		If unDossier.Name = "Juridique" then  path = stRep & "\" & fSociete.Name & "\Juridique"			Set fJuridique=oFSO.GetFolder (stRep & "\" & fSociete.Name & "\Juridique")  if not oFSO.FolderExists(path & "\Social") Then  fJuridique.subFolders.Add("Social") end if if not oFSO.FolderExists(path &"\Société") Then  fJuridique.subFolders.Add("Société") end if		end if	nextnextend if

Merci pour tes explications et ton temps

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...