VBScript for Each ne fonctionne pas
-
03-07-2019 - |
Question
Je ne parviens pas à utiliser la fonction suivante dans VBScript. J'essaie de placer tous les fichiers dans un dossier et de les parcourir pour obtenir le fichier dont le numéro est le plus élevé. (le format du nom de fichier est log_XXX.txt) Le problème que je rencontre est que le code n'entre jamais dans ma boucle pour chaque
. Je suis nouveau dans VBScript, mais je ne semble pas comprendre pourquoi cela ne fonctionne pas.
Function GetFileNumber(folderspec)
Dim fso, f, f1, fc, s, tempHighNum
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
WScript.Echo f.Files.Count : rem prints 3
Set fc = f.Files
WScript.Echo fc.Count : rem prints 3
Set tempHighNum = "000"
For Each f1 in fc
WScript.Echo f1.Size : rem does not print
WScript.Echo f1.Type : rem does not print
WScript.Echo f1.Name : rem does not print
s = Right(f1.name,3)
IF NOT(ISNULL(s)) THEN
IF (s > tempHighNum) THEN
tempHighNum = s
END IF
END IF
Next
GetFileNumber = tempHighNum
End Function
La solution
Modifiez cette ligne:
Set tempHighNum = "000"
à ce qui suit:
tempHighNum = "000"
Vous essayez de définir la variable tempHighNum sur un type de chaîne. Par conséquent, vous ne devez pas utiliser le mot clé Définir . Définir n'est nécessaire que lors de l'affectation de types d'objet à des variables.
Autres conseils
Je ne suis pas sûr du fonctionnement de votre script, je vous ai donc préparé cette application HTML. Il utilise un fichier de commandes appelé Dir.Bat
situé dans C: \ Batch
, qui crée un fichier appelé Data.Txt
situé dans c. : \ Temp
. Puis le script prend
plus de. Le script lit le fichier Data.Txt ligne par ligne. Chaque ligne étant lue, deux instructions fractionnées sont utilisées pour séparer la chaîne dans le nom du fichier texte. Après cela, je collecte ces chaînes contenant des nombres dans la variable ListCol
, comme je le teste pour des nombres de plus en plus grands. Je termine finalement avec le plus grand nombre que je place dans votre variable originale tempHighNum
. Je publierai le fichier HTA et le fichier Dir.Bat. Je sais que je n'ai pas écrit le script sous forme de fonction à l'aide d'un paramètre. Par conséquent, si vous devez utiliser un paramètre, je vais essayer de vous aider en modifiant le fichier HTA afin de permettre la saisie du chemin et du nom du fichier dans une zone de texte. Cela devrait le rendre facile à
changer et utiliser. J'ai ajouté et changé une chose ou deux pour le rendre plus fluide.
Je ne suis pas sûr du fonctionnement de votre script, je vous ai donc préparé cette application HTML. Il utilise un fichier de commandes appelé Dir.Bat
situé dans C: \ Batch
, qui crée un fichier appelé Data.Txt
situé dans c. : \ Temp
. Puis le script prend
plus de. Le script lit le fichier Data.Txt ligne par ligne. Chaque ligne étant lue, deux instructions fractionnées sont utilisées pour séparer la chaîne dans le nom du fichier texte. Après cela, je collecte ces chaînes contenant des nombres dans la variable ListCol
, comme je le teste pour des nombres de plus en plus grands. Je termine finalement avec le plus grand nombre que je place dans votre variable originale tempHighNum
. Je publierai le fichier HTA et le fichier Dir.Bat. Je sais que je n'ai pas écrit le script sous forme de fonction à l'aide d'un paramètre. Par conséquent, si vous devez utiliser un paramètre, je vais essayer de vous aider en modifiant le fichier HTA afin de permettre la saisie du chemin et du nom du fichier dans une zone de texte. Cela devrait le rendre facile à
changer et utiliser. J'ai ajouté et changé une chose ou deux pour le rendre plus fluide.
<HTML><!-- C:\HTML_and_HTA_CODE_EXAMPLES\ATest.Hta -->
<HEAD>
<TITLE>ATest.Hta</TITLE>
<HTA:APPLICATION ID="HTA MyApp"
APPLICATIONNAME="Help4Saul Dolgin"
BORDER ="thick"
BORDERSTYLE ="complex"
CAPTION ="yes"
CONTEXTMENU ="no"
ICON ="http://Your URL/your icon.ico"
INNERBORDER ="yes"
MAXIMIZEBUTTON ="yes"
MINIMIZEBUTTON ="yes"
NAVIGABLE ="no"
SCROLL ="no"
SHOWINTASKBAR ="yes"
SINGLEINSTANCE ="yes"
SYSMENU ="yes"
VERSION ="1.0"
WINDOWSTATE ="Normal"/>
</HEAD>
<style>
.ExBt21 {background:"#E0E0E0";Color:"red";}/* For Exit Button */
.Spn4 {font-family:"arial";font-weight:"bold";Color:"blue"}
.Spn2 {Color:"red"}
.tAr1 {font-family:"arial";font-weight:"bold";Color:"blue"}
</style>
<SCRIPT Language="VBScript">
Sub GetFileNumber
Dim FSO, f, fc, tempHighNum, strLine, objSHO, line
Dim DataArr, Data1Arr, Data2Arr, ListCol
fc=""
ListCol=""
tempHighNum=000
Set objSHO=CreateObject("WScript.Shell")
objSHO.run "C:\Batch\Dir.bat"
Set FSO = CreateObject( "Scripting.FileSystemObject" )
Set f = FSO.OpenTextFile("c:\Temp\Data.Txt", "1")
Do Until f.AtEndOfStream
fc = fc & f.ReadLine & vbLf
Loop
tArea1.innerHTML=fc
Data1Arr = Split(fc,vbLf)
Count=UBound(Data1Arr)
For x=0 To Count
DataArr = Split(Data1Arr(x),".")
If x <= Count-1 Then
Data2Arr = Split(DataArr(0),"_")
ListCol = ListCol & Data2Arr(1) & vbLf
If Data2Arr(1) > tempHighNum Then
tempHighNum = Data2Arr(1)
End If
End If
Next
Span2.innerHTML=tempHighNum
End Sub
Sub ExtBtn:Window.close:End Sub' Exit Script For Window
</SCRIPT>
<BODY bgcolor="#D0D0D0">
<button OnClick="GetFileNumber">Button To Press</button><br/>
<span id="Span1" class="Spn1">The biggest No. is: </span><span id="Span2" class="Spn2"></span><br/><br/>
<span Id="Span3" Class="Spn3">Dir.Bat looks in: </span><span Id="Span4" Class="Spn4">C:\Temp\Log_???.Txt</span><br/>
<textarea Id="tArea1" class="tAr1" rows="10"></textarea><br/><br/>
<input id="ExBtn21" class="ExBt21" type="Button" name="ExitBtn21" OnClick="ExtBtn" value=" -Exit- "/><!-- Exit Button -->
</BODY>
</HTML>
Le fichier Dir.Bat est le suivant:
@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt