1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| Option Explicit
'----------------------------------------Programme Principal----------------------------------------
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim strFilePath, strKey, strLeftString, strLine, strSection,Info,Resultat
Dim fso,strFolderBase,objFolderBase,objFile,IniFile,objSubFolder,ReportFile,Ws
Info = ""
Set fso = CreateObject("Scripting.FileSystemObject")
Set Ws = CreateObject("WScript.Shell")
strFolderBase = "C:\Temp\Test" 'Dossier de base pour la récursivité, exemple C:
ReportFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
If NOT fso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification que le répertoire existe
Set objFolderBase = fso.GetFolder(strFolderBase)
Resultat = RechercheIni(objFolderBase,"InformationFramework","Version")
wscript.echo Resultat
Call WriteReport(Resultat,ReportFile)
If fso.FileExists(ReportFile) Then Ws.Run ReportFile
'---------------------------------------------------------------------------------------------------
Function RechercheIni(objFolder,Section,Cle) ' La fonction prend en paramètre un objet Dossier
For Each objFile In objFolder.Files
If LCase(fso.GetExtensionName(objFile.Name)) = "ini" And Lcase(objFile.Name) = "parametre.ini" then
Set IniFile = fso.OpenTextFile(objfile.path,ForReading)
If objFile.Size > 0 Then ' Vérifier si le fichier n'est pas vide
Info = Info & Vbcrlf & objfile.name & " ==> " & objfile.path
Info = Info & Vbcrlf & ReadIni(IniFile,Section,Cle) & Vbcrlf & String(80,"-")
End If
End If
Next
For Each objSubFolder In objFolder.SubFolders
Call RechercheIni(objSubFolder,Section,Cle) ' Pour chaque sous-dossier, on rappelle la fonction récursive
Next
RechercheIni = Info
End Function
'---------------------------------------------------------------------------------------------------
Function ReadIni(iniFile,section,key)
' renvoie la valeur de la clé <key> de la section <section> de l'objet fichier <iniFile> ouvert en lecture
Dim iniText,reg,regSub
' Initialisation des objets regexp
' peut être déplacé dans le code principal en cas d'appels successifs
Set reg = New RegExp
Set regSub = New RegExp
reg.IgnoreCase = True
regSub.IgnoreCase = True
' lecture du fichier ini et fermeture
iniText = iniFile.ReadAll
iniFile.Close
' lecture de la clé spécifique de la section
reg.Pattern = "\[" & section & "\]([^\[]+)":regSub.Pattern = "\b" & key & " *= *([^;\f\n\r\t\v]+)"
On Error Resume Next
ReadIni = regSub.Execute(reg.Execute(iniText).Item(0).SubMatches(0)).Item(0).SubMatches(0)
If Err.Number = 5 then ReadIni = False
End Function
'---------------------------------------------------------------------------------------------------
Sub WriteReport(strText,ReportFile)
Dim fs,ts
Const ForWriting = 2
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(ReportFile,ForWriting,True)
ts.WriteLine strText
ts.Close
End Sub
'--------------------------------------------------------------------------------------------------- |
Partager