Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1812 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1193852
mezzomix23
Posté le 07-09-2005 à 10:23:28  profilanswer
 

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 :-)

mood
Publicité
Posté le 07-09-2005 à 10:23:28  profilanswer
 

n°1193922
pc75
Posté le 07-09-2005 à 11:45:13  profilanswer
 

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

n°1193941
mezzomix23
Posté le 07-09-2005 à 11:55:55  profilanswer
 

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 ?

n°1193973
pc75
Posté le 07-09-2005 à 12:25:07  profilanswer
 

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

n°1193987
mezzomix23
Posté le 07-09-2005 à 12:48:56  profilanswer
 

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

n°1193988
pc75
Posté le 07-09-2005 à 12:51:34  profilanswer
 

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

n°1194061
mezzomix23
Posté le 07-09-2005 à 13:53:42  profilanswer
 

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 :)

n°1194185
mezzomix23
Posté le 07-09-2005 à 15:28:05  profilanswer
 

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 :)

n°1194248
pc75
Posté le 07-09-2005 à 16:19:08  profilanswer
 

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.

n°1194431
mezzomix23
Posté le 07-09-2005 à 19:03:34  profilanswer
 

Ca a pas l'air de fonctionner malheureusement :(

mood
Publicité
Posté le 07-09-2005 à 19:03:34  profilanswer
 

n°1194876
mezzomix23
Posté le 08-09-2005 à 12:25:50  profilanswer
 

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 :)

n°1194969
mfauxock
Posté le 08-09-2005 à 14:00:43  profilanswer
 

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 ??

n°1195042
mezzomix23
Posté le 08-09-2005 à 14:29:32  profilanswer
 

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.

n°1196017
mezzomix23
Posté le 09-09-2005 à 15:08:49  profilanswer
 

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 !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
probleme copier fichier depuis urlStocker des fichier sur son serveur depuis un page php ou autre..
recuperer des information à partir d'un fichier html avec C++Comment ouvrir des fichier *.lut et *.big ?
Récuperer nom fichier dans une url[???] convertir le formatage du contenu d'1 fichier txt ?
Je n'arrive pas un mettre un fichier en telechargementListe déroulante de liens en PHP ?
COmment envoyer un netsend a une liste de poste dans un fichier texte 
Plus de sujets relatifs à : Récupération d'une liste de fichier dans un Array


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR