[Catégorie modifiée VB6 -> VBS] Compteur de Fichiers VBS

hereox - 27 sept. 2012 à 13:00
 hereox - 4 oct. 2012 à 09:40
Bonjour à tous !!

Alors voilà, j'ai fait un script qui me permet de compter les fichiers qui se trouve dans un répertoire (il fonctionne très bien).
Maintenant le problème est que j'aimerais aussi pourvoir compter les sous-répertoires et leurs fichiers au cas où il y en aurait dans le répertoire.

J'ai essayé de m'inspirer de code trouvé sur le net.
mais sans succès

Je sais qu'il faut que j'intègre à mon code une fonction récursive.

Merci d'avance pour vos futures réponses.

Cordialement
Héréox

Mon code:

Dim MyFolder
Dim Nombre
Dim objFso
Dim code_retour
code_retour = 0
 
MyFolder = WScript.Arguments.Named("f")
'WScript.echo MyFolder
 
Nombre = WScript.Arguments.Named("t")
'WScript.echo Nombre
 
Set objFso = CreateObject("Scripting.FileSystemObject")
 
'On vérifie l'existence du répertoire. Si celui-ci n'existe pas le script renvois une alerte critique.
If not objFso.FolderExists(MyFolder) Then
WScript.echo "Le répertoire n'existe pas"
Code_retour = 2
Else 
    ' Si le répertoire existe, le scripte vérifie si le nombre de fichier n'est pas dépassé.
' Et envoit une alerte critique si le nombre est dépassé.
        If objFso.GetFolder(MyFolder).Files.Count >= CInt(Nombre) Then
WScript.echo "Nombre de fichiers dépassé!!"
code_retour = 2
Else
 
WScript.echo "R.A.S"
code_retour = 0
End If
 
End If

29 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 sept. 2012 à 13:50
 Bonjour le Forum,

Petit exemple


Option Explicit
Const RootPath = "D:\SCRIPTS"
Dim objFso

Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(RootPath) Then
   Call SearchFolders(objFso.GetFolder(RootPath))
End If 

Set objFso = Nothing

Sub SearchFolders(ArgFolder)
    Dim subFolder
    MsgBox objFso.GetFolder(ArgFolder).Files.Count,,ArgFolder
    
    For Each subFolder In ArgFolder.SubFolders 
        Call SearchFolders(subFolder) 
    Next
End Sub




jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 sept. 2012 à 14:29
Petite correction dans l'exemple
Sub SearchFolders(ArgFolder)
    Dim subFolder
    MsgBox ArgFolder.Files.Count,,ArgFolder


 
jean-marc
0
Salut à toi Jean-Marc,
Tout d'abord merci pour ta réponse et pour l'aide que tu m'apporte !!
Je suis arrivé à compter les fichiers du répertoire principal et ceux des sous répertoire :)

Mais maintenant j'aimerais pouvoir compter les fichiers des sous ==> sous répertoire un si de suite.

Mon code :
'Const MyFolder = "C:\tmp"
Dim MyFolder
Dim oFSO,oFld
Dim NbFile
Dim Nombre
Dim code_retour
NbFile = 0
code_retour = 0

MyFolder = WScript.Arguments.Named("f")
WScript.echo MyFolder
Nombre = WScript.Arguments.Named("t")
WScript.echo Nombre

Set oFSO = CreateObject("Scripting.FileSystemObject")

If not oFSO.FolderExists(MyFolder) Then
WScript.echo "Le répertoire n'existe pas"
Code_retour = 2
else	
NbFile = oFSO.GetFolder(MyFolder).Files.count
   

For each oFld in  oFSO.GetFolder(MyFolder).SubFolders
NbFile = NbFile + oFld.Files.count
Next

If Nbfile >= Cint(Nombre) Then
MsgBox "Nombre de fichiers supérieur à " & Nombre ,vbExclamation
Set oFSO = Nothing
code_retour = 2
Else
MsgBox "Nombre de fichiers inferieur à " & Nombre ,vbExclamation
Set oFSO = Nothing
code_retour = 0
End if
End if

Wscript.quit(code_retour)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 oct. 2012 à 11:15
 Bonjour hereox


Il suffit de tester NbFile dans la boucle For each .... Next.


jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Jean-Marc !

Merci pour ta réponse, je vais essayer :)

Héréox
0
Re bonjour Jean-marc ! :)
Je ne parviens pas à placer mon test.
Je ne comprend pas comment faire :/
Peux-tu me donner un indice ?

Cordialement
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 oct. 2012 à 15:21
 (re)bonjour

Dans un .bat :
@echo off
REM 2 paramètres (chemin et nombre de fichiers)
call cscript D:\script.vbs D:\Diapositives 100 TTT
echo code retour du script.bat = %ERRORLEVEL%
pause


Le script.vbs :
Option Explicit
Dim objFso, objArgs
Dim MyFolder, MyCount, MyErrorLevel
MyErrorLevel = 0
 
Set objArgs = WScript.Arguments
 
If objArgs.Count <> 2 Then
   WScript.Echo "Erreur sur nombre arguments " & objArgs.Count 
   WScript.Quit(2)
End If

MyFolder = objArgs(0)
WScript.echo MyFolder
 
MyCount = objArgs(1)
WScript.Echo MyCount

Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(MyFolder) Then
   Call SearchFolders(objFso.GetFolder(MyFolder), MyCount, MyErrorLevel)
Else 
   WScript.echo MyFolder & " -> le répertoire n'existe pas"
   WScript.Echo "MyErrorLevel -> " & 2
   WScript.Quit(2)   
End If 

WScript.Echo "MyErrorLevel -> " & MyErrorLevel
Set objArgs = Nothing
Set objFso = Nothing
'#######################################################################
Function SearchFolders(ArgFolder, MyCount, MyErrorLevel)
    Dim subFolder
    WScript.Echo ArgFolder & vbTab & ArgFolder.Files.Count
    If ArgFolder.Files.Count >= CInt(MyCount) Then
       WScript.echo "Nombre de fichiers dépassé !!!"
       WScript.Echo "MyErrorLevel -> " & 2
       WScript.Quit(2)
    End If 
    
    For Each subFolder In ArgFolder.SubFolders 
        Call SearchFolders(subFolder, MyCount, MyErrorLevel) 
    Next




jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 oct. 2012 à 15:29
 

Il faut enlever TTT dans le .bat !!!


jean-marc
0
Salut Jean-marc !! :)
Et encore merci !
J'ai essayé de comprendre ce que tu à mis comme code mais je n'y vois pas claire :/

Mon but est juste de compter les fichiers du repertoire principale, les sous répertoire et les sous sous répertoire.

rappel de mon code :

Const MyFolder = "C:\tmp" 
Dim oFSO,oFld
Dim NbFile
NbFile = 0 


Set oFSO = CreateObject("Scripting.FileSystemObject") 

If oFSO.FolderExists(MyFolder) Then
NbFile = oFSO.GetFolder(MyFolder).Files.count
   

For each oFld in  oFSO.GetFolder(MyFolder).SubFolders
NbFile = NbFile + oFld.Files.count
Next

   
If Nbfile >= 5 Then 
MsgBox "Nombre de fichiers > 5",vbExclamation
Set oFSO = Nothing
'wscript.quit(2)
Else
MsgBox "Nombre de fichiers < 5",vbExclamation 
Set oFSO = Nothing
'wscript.quit(0)
End if   		
End if	
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 13:35
 Bonjour hereox et le Forum,

Rappel:

Un .bat
@echo off
REM 2 paramètres (chemin et nombre de fichiers)
call cscript H:\script.vbs H:\Diapositives 95
echo code retour du script.bat = %ERRORLEVEL%
pause


Un .vbs
Option Explicit
Dim objFso, objArgs
Dim MyFolder, MyCount, MyErrorLevel
MyErrorLevel = 0
 
Set objArgs = WScript.Arguments
 
If objArgs.Count <> 2 Then
   WScript.Echo "Erreur sur nombre arguments " & objArgs.Count 
   WScript.Quit(2)
End If

MyFolder = objArgs(0)
WScript.Echo "Racine : " & MyFolder
 
MyCount = objArgs(1)
WScript.Echo "Seuil  : " & MyCount & " fichiers"
WScript.Echo ""

Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(MyFolder) Then
   Call SearchFolders(objFso.GetFolder(MyFolder), MyCount, MyErrorLevel)
Else 
   WScript.Echo MyFolder & " -> le repertoire n'existe pas"
   WScript.Echo "MyErrorLevel -> " & 2
   WScript.Quit(2)   
End If 

WScript.Echo "MyErrorLevel -> " & MyErrorLevel
WScript.Echo ""
Set objArgs = Nothing
Set objFso = Nothing
'#######################################################################
Function SearchFolders(ArgFolder, MyCount, MyErrorLevel)
    Dim subFolder
    
    WScript.Echo ""
    WScript.Echo "Repertoire : " & ArgFolder 
    WScript.Echo "Nombre de fichiers : " & ArgFolder.Files.Count
    
    If ArgFolder.Files.Count >= CInt(MyCount) Then
       WScript.Echo "Nombre de fichiers > ou = au seuil !!!" &_
                    Space(3) & "MyErrorLevel -> " & 2
       WScript.Echo ""
       WScript.Quit(2)
    Else
       WScript.Echo "Nombre de fichiers < au seuil !!! " &_
                    Space(3) & "MyErrorLevel -> " & MyErrorLevel
       WScript.Echo ""    
    End If 
    
    For Each subFolder In ArgFolder.SubFolders 
        Call SearchFolders(subFolder, MyCount, MyErrorLevel) 
    Next
End Function


Quel souci ?


jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 13:45
Comment est lancé ton script ???
Task Manager (vbs ou bat), cmd, manuel ....


jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 13:54
Erratum : Task Scheluder et non task Manager

Le script, que tu présentes ce jour, ne s'exécute pas comme ton script initial du jeudi 27 septembre 2012 à 13:00:54.

Manque de précisions.

jean-marc
0
Salut !!! :)
Alors mon script est un vbs.
Le but du script est de compter les fichiers du repertoire c:/tmp.
Il doit aussi compter les sous répertoire ( sa j'ai réussi :) )
Mais maintenant je dois compter les sous sous répertoire.
J'ai suprimé les code_retour ect...
Pour le rendre plus claire mais il fais toujours la meme chose.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 14:22
As-tu testé le script proposé ???
Fonction récursive sur les répertoires et sous-répertoires.

jean-marc
0
Oui j'ai essayé :)
Mais j'aimerais savoir ce que je dois rajouter sur le miens en faite.
Parce que je suis débutant et je ne comprend tout sur le tiens.
Alors que le miens j'arrive à me cituer :)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 15:23
 Correction de ton script proposé à 13h08.

Option Explicit
Dim objFso
Dim MyFolder, MyCount
MyFolder = "C:\tmp"
MyCount = 5

Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(MyFolder) Then
   Call SearchFolders(objFso.GetFolder(MyFolder), MyCount)
Else 
   MsgBox MyFolder & " -> le repertoire n'existe pas" &vbCrLf&_
          "Fin du script",,ArgFolder
   WScript.Quit   
End If 

Set objFso = Nothing
'################################################################
Function SearchFolders(ArgFolder, MyCount)
    Dim subFolder
    
    If ArgFolder.Files.Count >= CInt(MyCount) Then
       MsgBox "Seuil de fichiers fixé à " & MyCount &vbCrLf&_
              "Nombre de fichiers > ou = au seuil car " &_
               ArgFolder.Files.Count & " fichiers" &vbCrLf&_
               "Fin du script",,ArgFolder
       WScript.Quit 
    Else
       MsgBox "Seuil de fichiers fixé à " & MyCount &vbCrLf&_
               "Nombre de fichiers < au seuil car " &_
               ArgFolder.Files.Count & " fichiers",,ArgFolder
    End If 
    
    For Each subFolder In ArgFolder.SubFolders 
        Call SearchFolders(subFolder, MyCount) 
    Next
End Function

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 15:44
Synthèse de ton script initial

- lecture de c;\temp puis nbfile= nbre de fichiers de c:\temp
- boucle for... next, lecture des sous-repertoires de la racine et nbfile=nbfile + nbre de fichiers de ses sous-reprtoires
- sortie de boucle "for each ... next"
- verif nbfile qui contient le nbre de fichiers de ta c:\tmp et de ses sous-répertoires.



jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 15:53
A quoi correspond ton count de 5 ???

- max de fichiers dans le répertoire racine ou
dans un de ses sous-répertoire;
- max de fichiers dans le cumul du répertoire racine et
de ses sous-répertoires.

Ton dernier script ne fait qu'un msgbox et n'agit donc pas sur le résultat du nombre de fichiers.

Que veux-tu faire de ce résultat ???

jean-marc
0
Merci pour tes différentes réponse,
Je comprend beaucoup mieux maintenant !! ;)
Le nombre total de fichiers calculé dans le repertoire Tmp, les sous-répertoire et sous sous-répertoire ect .... ne doit pas dépasser 5.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 oct. 2012 à 16:20
ok pour le count total.
Comment sera exécuté ton script et comment comptes-tu récupérer
le count des fichiers ???



jean-marc
0
Rejoignez-nous