Bonjour,
Je débute VBS et aujourd'hui j'ai un petit soucis. Je développe un script vbs qui me permet de décompresser des archives Winrar. Donc bien sur via mon VBS j'utilise Winrar.

Voici en gros ce que je veux faire. Un dossier principal qui contient plusieurs sous-dossiers, et dans c'est différents sous dossier il y a les archives .rar. Je rentre le Path complet du dossier principal dans une "inputbox", et après un traitement, le script vbs détecte les différents sous-dossier.
Lorsqu'il détecte les archives RAR dans le premier sous-dossier, il l'est extrait bien pas de soucis. Une fois la première extraction faites, il passe au second sous-dossier et commence la décompression des archives.
Et un soucis survient, en effet a partir du second dossier, mon script continu de balayé les autres sous-dossier et donc décompresse les archives RAR en même temps.

Et bien sur, j'aimerai qu'il décompresse les archives les uns après les autres et pas en même temps.

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'''''''''''''''''''''''''''''''''''Script de décompression des archives'''''''''''''''''''''''''
strComputer ="."
 
 
Const ForWriting = 2, ForReading = 1
'Déclaration de variables
Dim oF1d, Quest ,Quest2 , FileIni, FilePathIni, ParamsRar, Quote, ConfigWinRar, SubPathFileRar, LongPath, PathToFileRar, objItem, NameProcess
Quote = """"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
	Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'WinRAR.exe'")
 
'Déclaration d'objet
Set PathWinrar = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("wscript.shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
 
 
Sub testing()
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'	Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'WinRAR.exe'")
		For Each objItem in colProcessList
		NameProcess = objItem.Name
		MsgBox NameProcess
Next
 
End Sub
'Lecture du fichier PathWinRar.exe.ini'
Set FileIni = PathWinrar.OpenTextFile("PathWinRar.exe.ini", ForReading)
		Do Until FileIni.AtEndOfLine
		FilePathIni = FileIni.ReadLine
		Loop 
FileIni.Close
 
'MsgBox FilePathIni
 
 
'''''''''''''''''''''''''''''''''''''Paramétrage Winrar'''''''''''''''''''''''''''''''''
'Récupérations des paramétres Winrar dans le fichier ConfigWinrar.ini
Set FileIni = PathWinrar.OpenTextFile("ConfigWinrar.ini", ForReading)
		Do Until FileIni.AtEndOfLine
		ConfigWinRar = FileIni.ReadLine
		Loop
FileIni.Close
 
'MsgBox ConfigWinRar
 
'Selection du dossier a décompresser
inpbox = vbCRLF & "Chemin à parcourir" & vbCRLF
Quest = inputbox(inpbox, "Entrer le chemin a parcourir", "")
inpbox2 = vbCRLF & "Dossier de destination" & vbCRLF
Quest2 = inputbox(inpbox2, "Entrer le répertoire de destination", Quest)
 
If oFSO.FolderExists(Quest) Then
For Each oF1d In oFSO.Getfolder(Quest).SubFolders
SubPathFileRar = oF1d.Name
PathToFileRar = Quest & "\" & SubPathFileRar
LongPath = ConfigWinRar & Quote & "" & PathToFileRar & "\*.r00" & Quote & " " & Quote & PathToFileRar & Quote
MsgBox LongPath
 
testing()
 
Do while (NameProcess ="WinRAR.exe") 
 
'	MsgBox "Commencement Pause"
	'Wscript.Sleep 2000
'	MsgBox "Fin pause"
testing()
MsgBox NameProcess
Loop
'Sub testing()
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'	Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'WinRAR.exe'")
'		For Each objItem in colProcessList
'		NameProcess = objItem.Name
'		MsgBox NameProcess
'Next
 
'End Sub
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
objWMIService.Create LongPath, null, null, intProcessID
 
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _
    ("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process'")
 
Do Until i = 1
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    If objLatestProcess.TargetInstance.ProcessID = intProcessID Then
        i = 1
    End If
    'MsgBox "Winrar has been terminated"
Loop
 
 
 
Next
 
End If
Bon c'est un peu le bazar je l'admet, j'ai pas l'habitude de coder
Ce que je voulez faire pour éviter que la décompresser se fasse en même temps c'était de détecter la présence ou non du processus "Winrar.exe".
Si le processus Winrar.exe existe alors le script doit attendre, si il n'existe pas, il peut passer au sous-dossier suivant et décompresser les archives.
Mais malheureusement je n'ai pas réussi à le faire.

J'attends donc vos idées, suggestions et vos critiques.

Merci d'avance