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

Signaler
-
 hereox -
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

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Petite correction dans l'exemple
Sub SearchFolders(ArgFolder)
    Dim subFolder
    MsgBox ArgFolder.Files.Count,,ArgFolder


 
jean-marc
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)
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour hereox


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


jean-marc
Bonjour Jean-Marc !

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

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

Cordialement
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 (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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 

Il faut enlever TTT dans le .bat !!!


jean-marc
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	
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Comment est lancé ton script ???
Task Manager (vbs ou bat), cmd, manuel ....


jean-marc
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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
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.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
As-tu testé le script proposé ???
Fonction récursive sur les répertoires et sous-répertoires.

jean-marc
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 :)
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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
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.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
ok pour le count total.
Comment sera exécuté ton script et comment comptes-tu récupérer
le count des fichiers ???



jean-marc