VBScript For Each nicht funktioniert
-
03-07-2019 - |
Frage
Ich kann die folgende Funktion in VBScript zu arbeiten. Ich versuche, alle Dateien in einem Ordner und Schleife durch sie zu erhalten, die höchsten nummerierte Datei zu erhalten. (Dateiname-Format ist log_XXX.txt) Das Problem, das ich habe, ist, dass der Code nie meine For Each
Schleife eintritt. Ich bin neu in VBScript, aber ich scheinen nicht zu verstehen, warum dies nicht funktionieren wird.
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
Lösung
diese Zeile ändern:
Set tempHighNum = "000"
auf die folgenden:
tempHighNum = "000"
Sie versuchen, die tempHighNum Variable auf einen String-Typ einzustellen. Daher sollten Sie nicht verwenden, um die Set Stichwort. Set wird nur dann benötigt, wenn Objekttypen Variablen zugewiesen wird.
Andere Tipps
Ich bin nicht sicher, wie Ihr Skript funktioniert so habe ich diese HTML-Anwendung für Sie zusammen. Es verwendet eine Batch-Datei Dir.Bat
befindet sich in C:\Batch
genannt, die eine Datei mit dem Namen Data.Txt
in c:\Temp
gelegen macht. Dann wird das Skript verwendet
Über. Das Skript liest die Datei data.txt Zeile für Zeile. Da jede Linie Split-Anweisungen gelesen werden zwei verwendet Name die Zeichenfolge zu trennen in der Textdatei. Danach sammle ich diese Zeichenfolge Zahlen in die Variable ListCol
enthalten, als ich für eine größere und größere Zahlen testen. Ich winde schließlich mit der größten Zahl, den ich in Ihrer ursprünglichen Variable tempHighNum
platzieren. Ich werde die HTA-Datei und die Dir.Bat Datei schreiben. Ich weiß, dass ich nicht das Skript als eine Funktion geschrieben habe über einen Parameter so, wenn Sie wirklich einen Parameter verwenden müssen, werde ich versuchen, Ihnen zu helfen, indem Sie die HTA-Datei zu ändern, damit es möglich, den Pfad zu betreten und Namen in einem Text-Datei. Das sollte es einfach zu
ändern und verwenden. Ich fügte hinzu, und verändert das eine oder andere, um es glatter laufen.
Ich bin nicht sicher, wie Ihr Skript funktioniert so habe ich diese HTML-Anwendung für Sie zusammen. Es verwendet eine Batch-Datei Dir.Bat
befindet sich in C:\Batch
genannt, die eine Datei mit dem Namen Data.Txt
in c:\Temp
gelegen macht. Dann wird das Skript verwendet
Über. Das Skript liest die Datei data.txt Zeile für Zeile. Da jede Linie Split-Anweisungen gelesen werden zwei verwendet Name die Zeichenfolge zu trennen in der Textdatei. Danach sammle ich diese Zeichenfolge Zahlen in die Variable ListCol
enthalten, als ich für eine größere und größere Zahlen testen. Ich winde schließlich mit der größten Zahl, den ich in Ihrer ursprünglichen Variable tempHighNum
platzieren. Ich werde die HTA-Datei und die Dir.Bat Datei schreiben. Ich weiß, dass ich nicht das Skript als eine Funktion geschrieben habe über einen Parameter so, wenn Sie wirklich einen Parameter verwenden müssen, werde ich versuchen, Ihnen zu helfen, indem Sie die HTA-Datei zu ändern, damit es möglich, den Pfad zu betreten und Namen in einem Text-Datei. Das sollte es einfach zu
ändern und verwenden. Ich fügte hinzu, und verändert das eine oder andere, um es glatter laufen.
<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>
Die Dir.Bat Datei weiter:
@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt