Récupération d'une liste de fichier dans un Array

Récupération d'une liste de fichier dans un Array - VB/VBA/VBS - Programmation

Marsh Posté le 07-09-2005 à 10:23:28    

Bonjour à tous !
 
Voilà, j'ai essayé de faire ce que je voulais en vbscript, mais vu le résultat final que je souhaite, on m'a conseillé le hta. Je viens à peine de commencer et je suis déjà bloqué :-(
 
Cette première fonction doit me permettre de parcourir un dossier et d'en lister tous les fichiers avec une extension .cmd. Ca j'arrive à le faire. Maintenant, et ceci dans le but d'une utilisation ultérieure, j'aimerais qu'au lieu de m'aficher bêtement cette liste, ces données soient stockées dans un array ou quelque chose de similaire afin de pouvoir les récupérer dans l'interface html avec une "case à cocher" devant chaque nom, et c'est là que je bloque. J'ai essayé plusieurs versions, soit il m'affiche tout d'un bloc, soit il ne m'affiche que le dernier.
 
Voici le code que j'essaye de faire fonctionner :
 

Code :
  1. <html>
  2. <head>
  3.  <title>Random</title>
  4.  <script language="vbscript">
  5.  Sub List()
  6.  Dim oShell, CMDFolder, oSys, CMD, CMDCollection, CMDs
  7.  Dim Markets()
  8.  ReDim Markets(30)
  9.  Set oShell = CreateObject("WScript.Shell" )
  10.  Set oSys = CreateObject("Scripting.FileSystemObject" )
  11.  CMDFolder = "C:\DFSCopyJob"
  12.  Set CMD = oSys.GetFolder(CMDFolder)
  13.  Set CMDCollection = CMD.Files
  14.  For i = 1 to 30
  15.   For Each CMDs in CMDCollection
  16.   If UCase(Right(CMDs.name,3)) = UCase("cmd" ) Then
  17.    Markets(i) = CMDs.name
  18.   End If
  19.   Next
  20.  Next
  21.  txtOutput.innerhtml = Markets(1)
  22.  document.title = "List of Markets"
  23.  End Sub
  24.  </script>
  25. </head>
  26. <body onload='List()'>
  27.  <div id='txtOutput'></div>
  28. </body>
  29. </html>


 
Merci de votre aide :-)

Reply

Marsh Posté le 07-09-2005 à 10:23:28   

Reply

Marsh Posté le 07-09-2005 à 11:45:13    

Bonjour,
 
A mon avis, cette ligne  
 
txtOutput.innerhtml = Markets(1)
 
devrait se trouver dans la boucle For

Reply

Marsh Posté le 07-09-2005 à 11:55:55    

C'est bien dans ce sens là que je suis parti. J'ai avancé un peu depuis tout à l'heure, mais c'est pas encore ça.
 
Voici le nouveau code :
 

Code :
  1. <html>
  2. <head>
  3.  <title>Random</title>
  4.  <script language="vbscript">
  5.  Sub List()
  6.  Dim oShell, CMDFolder, oSys, CMD, CMDCollection, CMDs, Markets, Market, i
  7.  Set oShell = CreateObject("WScript.Shell" )
  8.  Set oSys = CreateObject("Scripting.FileSystemObject" )
  9.  CMDFolder = "C:\DFSCopyJob"
  10.  Set CMD = oSys.GetFolder(CMDFolder)
  11.  Set CMDCollection = CMD.Files
  12.   For Each CMDs in CMDCollection
  13.   If UCase(Right(CMDs.name,3)) = UCase("cmd" ) Then
  14.    s = s & CMDs.name & "|"
  15.   End If
  16.   Next
  17.  Markets = Split(s,"|" )
  18.  For i = 0 to UBound(Markets) - 1
  19.    Market = "<INPUT type='checkbox' name='nom' value=''> " & Markets(i)
  20.  Next
  21.  txtOutput.innerhtml = Market
  22.  document.title = "List"
  23.  End Sub
  24.  </script>
  25. </head>
  26. <body onload='List()'>
  27.  <div id='txtOutput'></div>
  28. </body>
  29. </html>


 
Lors de l'affichage, il ne m'affiche que le dernier enregistrement, il ne tient pas compte des précédants :-( Où est mon erreur ?

Reply

Marsh Posté le 07-09-2005 à 12:25:07    

Re,
 
Et si tu fais :
 
For i = 0 to UBound(Markets) - 1  
     Market = "<INPUT type='checkbox' name='nom' value='" & Markets(i) & "'>"
Next

Reply

Marsh Posté le 07-09-2005 à 12:48:56    

J'ai un bel écran tout blanc avec une case à cocher unique et orpheline de son texte :-(

Reply

Marsh Posté le 07-09-2005 à 12:51:34    

Re,
 
Et ça ?
 
For i = 0 to UBound(Markets) - 1  
     Market = Market & "<INPUT type='checkbox' name='nom' value='" & Markets(i) & "'>" & vbCrlf
Next

Reply

Marsh Posté le 07-09-2005 à 13:53:42    

Non, plus, mais grâce à toi, j'ai pu mettre ça :
 

Code :
  1. For i = 0 to UBound(Markets) - 1
  2.    Market = Market & "<INPUT type='checkbox' name='nom' value=''> " & Markets(i) & "<br>"
  3.  Next


 
et là ça marche nickel... je m'attaque à la suite :)

Reply

Marsh Posté le 07-09-2005 à 15:28:05    

Bon un nouveau problème :-(
 
Voici le code :
 

Code :
  1. <html>
  2. <head>
  3.  <title>Random</title>
  4.  <script language="javascript">
  5.  <!--
  6.  function CheckAll()
  7.   {
  8.    for (var c=0;c<document.forms[0].elements.length;c++)
  9.      {
  10.       var e = document.forms[0].elements[c];
  11.       if (e.name != 'allbox')
  12.        e.checked = document.MarketList.allbox.checked;
  13.      }
  14.   }
  15.  //-->
  16.  </script>
  17.  <script language="vbscript">
  18.  Sub List()
  19.  Dim oShell, CMDFolder, oSys, CMD, CMDCollection, CMDs, Markets, Market, i
  20.  Set oShell = CreateObject("WScript.Shell" )
  21.  Set oSys = CreateObject("Scripting.FileSystemObject" )
  22.  CMDFolder = "C:\DFSCopyJob"
  23.  Set CMD = oSys.GetFolder(CMDFolder)
  24.  Set CMDCollection = CMD.Files
  25.   For Each CMDs in CMDCollection
  26.   If UCase(Right(CMDs.name,3)) = UCase("cmd" ) Then
  27.    s = s & CMDs.name & "|"
  28.   End If
  29.   Next
  30.  Markets = Split(s,"|" )
  31.  For i = 0 to UBound(Markets) - 1
  32.    Market = Market & "<INPUT type='checkbox' name='" & Markets(i) & "'> " & Markets(i) & "<br>"
  33.  Next
  34.  Market = Market & "<BR> <input name='allbox' type='checkbox' value='Check All' onClick='CheckAll();' /><B>Select/Unslect All</B>"
  35.  Market = Market & "<BR><BR> <input type=button value='Start DFS Replication' onClick=StartDFSReplication()> <input type=button value=Cancel onClick=window.close()>"
  36.  txtOutput.innerhtml = Market
  37.  document.title = "List"
  38.  End Sub
  39.  Sub StartDFSReplication()
  40.  End Sub
  41.  </script>
  42. </head>
  43. <body onload='List()'>
  44.  <form name="MarketList">
  45.  <div id='txtOutput'></div>
  46.  </form>
  47. </body>
  48. </html>


 
Donc tout s'ouvre bien, je peux sélectionner les cases que je veux, la case à cocher "Select/Unselect All" fonctionne bien aussi. Le bouton "Cancel", pas de soucis. On arrive au bouton "Start DFS Replication". J'ai compris qu'il fallait créer un nouveau "Sub... End Sub", ce que j'ai fait.
 
Maintenant, ce que je n'arrive pas à faire, c'est de faire un check des cases qui sont cochées et de les récupérer pour lancer une nouvelle commande. En gros, je veux que le fichier .cmd associé à chaque case à cocher activée soit exécuté.
 
Merci :)

Reply

Marsh Posté le 07-09-2005 à 16:19:08    

C'est encore moi,
 
Si tu fais une boucle sur ton tableau (For i = 0 to UBound(Markets) - 1), comme tes ChekBox portent le nom des variables du tableau, tu dois pouvoir faire un test du genre : si Markets(i).checked = true ...)
 
C'est juste une idée.

Reply

Marsh Posté le 07-09-2005 à 19:03:34    

Ca a pas l'air de fonctionner malheureusement :(

Reply

Marsh Posté le 07-09-2005 à 19:03:34   

Reply

Marsh Posté le 08-09-2005 à 12:25:50    

Bon je sais toujours pas comment récupérer les valeurs qui me manquent, mais je chercherais plus tard, à moins que quelqu'un n'ait la solution.
 
Toujours dans le même script, je cherche à générer un popup web depuis le script de base afin de pouvoir y entrer un nom d'utilisateur et un mot de passe (c'est surtout pour lui l'interface web, car je peux masquer les lettres/chiffres entrés) et récupérer les variables.
 
J'ai pas mal cherché et j'ai trouvé plusieurs bout de code que j'ai essayé de mettre ensemble, mais cela ne colle pas :( voici ce que j'essaye de faire fonctionner en vain :
 

Code :
  1. Sub StartDFSReplication()
  2. On Error Resume Next
  3. Set oIE = CreateObject("InternetExplorer.Application" )
  4. With oIE
  5.       .RegisterAsDropTarget = False
  6.       .Resizable = False : .FullScreen = True
  7.       .width = 400       : .height = 200
  8.       .Menubar = True
  9.       .Navigate "about:blank"
  10.       .document.open
  11.       .document.write _
  12.  "<html><head><" & "SCRIPT LANGUAGE='VBScript'>" _
  13.   & "Sub RunScript" _
  14.   & "OKClicked.Value = 'OK'" _
  15.   & "End Sub" _
  16.   & "Sub CancelScript" _
  17.   & "OKClicked.Value = 'Cancelled'" _
  18.   & "End Sub" _
  19.   & "</" _
  20.   & "SCRIPT><title>Password _</title></head>" _
  21.   & "<BODY BGCOLOR='#C6D7DA'>" _
  22.   & "Please enter your administrative name and password :</p>" _
  23.   & "<font size='2' face='Arial'>" _
  24.   & "Username:&nbsp;&nbsp;&nbsp; </font><font face='Arial'>" _
  25.   & "<input type='text' name='UserName' size='30'></p>" _
  26.   & "<font size='2' face='Arial'>" _
  27.   & "Password:&nbsp;&nbsp;&nbsp; </font><font face='Arial'>" _
  28.   & "<input type='password' name='UserPassword' size='30'></font></p>" _
  29.   & "<input type='hidden' name='OKClicked' size = '20'>" _
  30.   & "<input id=runbutton class='button' type='button' value=' OK '" _
  31.   & "name='ok_button' onClick='RunScript'>" _
  32.   & "&nbsp;&nbsp;&nbsp;" _
  33.   & "<input id=runbutton class='button' type='button' value='Cancel'" _
  34.   & "name='cancel_button' onClick='CancelScript'></body></html>"
  35.       .document.close
  36.       .document.all.user.focus
  37.  oSH.Appactivate "Password _"
  38.       document.Visible = True
  39.  Do While (.document.body.all.OKClicked.Value = "" )
  40.        Wscript.Sleep 250               
  41.  Loop
  42.  strName = .document.body.all.UserName.Value
  43.  strPassword = .document.body.all.UserPassword.Value
  44.  strButton = .document.body.all.OKClicked.Value
  45.  oIE.Quit
  46.  Wscript.Sleep 250
  47. End With
  48. End Sub


 
Merci :)

Reply

Marsh Posté le 08-09-2005 à 14:00:43    

C'est bizarre le VBS accepte aussi des entête de type sub / end sub
Pourquoi ne pas essayer de faire un fichier VBS à part et le lancer à partir du code HTML : ce n'est pas possible ??

Reply

Marsh Posté le 08-09-2005 à 14:29:32    

Oui c'est possible, mais j'essaye de ne pas avoir trop de fichiers différent et comme je sais que le vbs peut générer des fenêtres html et récupérer leur valeur, autant le faire :)
 
En fait le code que j'ai mis ci-dessus fonctionne partiellement on va dire... en fait c'est un .hta à l'origine... Une fois initialisée, je clique sur un bouton et ce bouton effectue le sub ci-dessus. Quand je clique dessus, la fenêtre s'ouvre bien, je peux entrer le nom et le mot de passe, mais pendant ce temps, la fenêtre principale est inaccessible et quand je clique soit sur OK ou Cancel de la fenêtre popup, il n'y a pas de retour alors qu'il devrait y avoir une action pour chacun des boutons. Voilà le problème que je n'arrive pas à résoudre.

Reply

Marsh Posté le 09-09-2005 à 15:08:49    

J'ai trouvé autre chose qui a fonctionné, mais finalement j'ai laissé tomber cette version (beaucoup plus compliqué que simplement lancer le .hta depuis une console CMD avec droit admin).
 
Il me reste toujours le problème de récupérer les cases que j'ai cochée et lancer une commande pour chaque case cochée :(
 
Voilà le code :

Code :
  1. <script language="vbscript">
  2.  Dim DFSTempFolder
  3.  DFSTempFolder = "C:\TEMP\DFSReplication"
  4.  Sub OnLoad()
  5.  self.ResizeTo 0,0
  6.  Dim oShell, CMDFolder, oSys, CMD, CMDCollection, CMDs, Markets, Market, i
  7.  Set oShell = CreateObject("WScript.Shell" )
  8.  Set oSys = CreateObject("Scripting.FileSystemObject" )
  9.  CMDFolder = "C:\DFSCopyJob"
  10.  If Not oSys.FolderExists(CMDFolder) Then
  11.   MsgBox "The folder 'DFSCopyJob' doesn't exists." & VbCrLf & "The application will now quit !", VBCritical, "DFSCopyJob Folder Missing !"
  12.   Window.close
  13.  End If
  14.     self.Focus()
  15.     self.ResizeTo 375,700
  16.  Set CMD = oSys.GetFolder(CMDFolder)
  17.  Set CMDCollection = CMD.Files
  18.   For Each CMDs in CMDCollection
  19.   If UCase(Right(CMDs.name,3)) = UCase("cmd" ) Then
  20.    s = s & CMDs.name & "|"
  21.   End If
  22.   Next
  23.  Markets = Split(s,"|" )
  24.  Market = "<B>SELECT THE DESIRED MARKET(S)</B> <br><br>"
  25.  For i = 0 to UBound(Markets) - 1
  26.    Market = Market & "<INPUT type='checkbox' name='" & Markets(i) & "'> " & Markets(i) & "<br>"
  27.  Next
  28.  Market = Market & "<BR> <input name='allbox' type='checkbox' value='Check All' onClick='CheckAll();' /><B>Select/Unslect All</B>"
  29.  Market = Market & "<BR><BR> <input type=button value='Start DFS Replication' onClick=StartDFSReplication()> <input type=button value=Cancel onClick=window.close()>"
  30.  txtOutput.innerhtml = Market
  31.  document.title = "Make your choice"
  32.  End Sub
  33.  Sub Prepare()
  34.  Dim oSys
  35.  Set oSys = CreateObject("Scripting.FilesystemObject" )
  36.  If Not oSys.FolderExists(DFSTempFolder) Then
  37.   oSys.CreateFolder(DFSTempFolder)
  38.  Else
  39.   oSys.DeleteFolder(DFSTempFolder)
  40.   oSys.CreateFolder(DFSTempFolder)
  41.  End If
  42.  End Sub
  43.  Sub StartDFSReplication()
  44.   Dim oShell
  45.  Set oShell = CreateObject("WScript.Shell" )
  46.   Prepare
  47.   For i = 0 to End
  48.   oShell.Run "cscript.exe " & DFSTempFolder & "\Start_" & Markets(i) & ".vbs", 9, True
  49.   Next
  50.  Self.close
  51.  
  52.  End Sub
  53.  </script>


 
Et ce que je n'arrive pas à faire se situe là plus précisement :

Code :
  1. For i = 0 to End
  2.   oShell.Run "cscript.exe " & DFSTempFolder & "\Start_" & Markets(i) & ".vbs", 9, True
  3.   Next


 
Voici ce que j'aimerai faire en gros, j'ai juste mis un code pour donner la logique :)
Merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed