IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

VBS et Winrar


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut VBS et Winrar
    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

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    mis en page :

    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
    '''''''''''''''''''''''''''''''''''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")
    '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 
    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
    J'ai essayé de regarder mais il y a pas mal de choses que je ne comprends pas notemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set PathWinrar = CreateObject("Scripting.FileSystemObject") 'pkoi faire plusieurs instances du filesystem
    Set FileIni = PathWinrar.OpenTextFile("PathWinRar.exe.ini", ForReading) 'quel est le chemin de ce fichier, il n'est pas renseigné auparavant
    'Wscript.Sleep 2000 'pkoi c'est commenté
    Pour résoudre ton souci, il existe la méthode Run, qui prend plusieurs paramètres, si le 2eme paramètre est à true, le script va attendre la fin du process avant de poursuivre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    commande = "calc.exe" 'par exemple, mais tu peux utiliser winrar ^^
    Set objShell = CreateObject("WScript.Shell")
    set objExec = objShell.Run(commande,7,true)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Merci pour ton aide, je vais tester tous sa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set PathWinrar = CreateObject("Scripting.FileSystemObject") 'pkoi faire plusieurs instances du filesystem
    Set FileIni = PathWinrar.OpenTextFile("PathWinRar.exe.ini", ForReading) 'quel est le chemin de ce fichier, il n'est pas renseigné auparavant
    'Wscript.Sleep 2000 'pkoi c'est commenté
    Le "Wscript.Sleep 2000 ' est commenté car j'avais essayé de faire une pause pour attendre la fin de chaque décompresser. Le code en commentaire sont des choses que j'ai tester mais qui ne marche pas comme je souhaite.

    Le fichier "PathWinRar.exe.ini" se trouve au même emplacement que mon script.
    Et dans ce fichier, il y a le chemin de Winrar.exe. Et dans mon cas c'est "D:\Program Files\Winrar\WinRAR.exe"

    Concernant les instances des FileSystemObject je ne savais pas qu'on pouvez utiliser une seule et même instance pour faire différentes choses. Je vais un peu nettoyer mon code.

    Merci pour ton aide, je vais tester tous sa, je te tiens au courant

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Merci bien sa marche enfin!
    J'aimerai encore faire une chose.
    Intégrer mon script vbs au clic droit. J'ai réussi a bien l'intégrer a mon clic droit quand je clic sur un dossier, en modifiant la base de registre.
    Je n'ai pas réussi a exécuter le script vbs directement via le clic droit. Sa exécute un .bat qui exécute le script vbs.
    Mon soucis en faite c'est de récupérer le chemin complet du dossier sur lequel je fais mon clic droit.
    Et je ne vois pas du tout comment faire pour faire cette action.
    Le récupération du chemin d'un dossier doit se faire sans action de l'utilisateur.

    Merci pour les futurs réponse

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    avce ton .bat tu arrive à récupérer l'adresse du dossier ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Merci pour ta réponse, a vrai dire je n'est pas penser à cette option, mes connaissances en batch sont encore plus maigre qu' en vbs.
    Comment faire pour récupérer le chemin du dossier sur lequel je fais mon clic droit en bat?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Citation Envoyé par ced600 Voir le message
    avce ton .bat tu arrive à récupérer l'adresse du dossier ?
    Et non je n'arrive pas a récupérer le chemin du dossier avec le .bat

Discussions similaires

  1. include dans un VBS ?
    Par rodolphedj dans le forum ASP
    Réponses: 20
    Dernier message: 16/12/2004, 22h57
  2. [ASP][VBS] Question sur if et false
    Par bigtoof dans le forum ASP
    Réponses: 2
    Dernier message: 18/06/2004, 16h28
  3. [VBS] décodage base 64
    Par windob dans le forum VBScript
    Réponses: 2
    Dernier message: 12/04/2004, 00h53
  4. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  5. Création d'un vbs qui permettrait d'arreter l'agent sql
    Par cracosore dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 03/02/2004, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo