2009-04-30 17 views
4

Ich kann die folgende Funktion in VBScript nicht funktionieren. Ich versuche, alle Dateien in einem Ordner abzurufen und durch sie zu durchlaufen, um die Datei mit der höchsten Nummer zu erhalten. (Dateinamensformat ist log_XXX.txt) Das Problem, das ich habe, ist, dass der Code nie meine For Each Schleife eingibt. Ich bin neu in VBScript, aber ich verstehe nicht, warum das nicht funktioniert.VBScript für jedes funktioniert nicht

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 

Antwort

11

Ändern Sie diese Zeile:

Set tempHighNum = "000" 

auf die folgenden:

tempHighNum = "000" 

Sie versuchen, die tempHighNum Variable auf einen String-Typ einzustellen. Daher sollten Sie das Schlüsselwort Set nicht verwenden. Set wird nur benötigt, wenn Objekttypen Variablen zugewiesen werden.

+0

es schlug mich .. ich bestätigen. – madcolor

+1

Das hat es behoben. Vielen Dank. –

1

Ich bin nicht sicher, wie Ihr Skript funktioniert, also lege ich diese HTML-Anwendung für Sie zusammen. Es verwendet eine Stapeldatei mit dem Namen Dir.Bat in C:\Batch, die eine Datei mit der Bezeichnung Data.Txt in c:\Temp erstellt. Dann nimmt das Skript über. Das Skript liest die Datei Data.Txt Zeile für Zeile. Wenn jede Zeile gelesen wird, werden zwei getrennte Anweisungen verwendet, um die Zeichenfolge im Namen der Textdatei zu trennen. Danach sammle ich die Zeichenketten, die Zahlen enthalten, in die Variable ListCol, während ich nach immer größeren Zahlen teste. Ich komme schließlich mit der größten Zahl, die ich in Ihrer ursprünglichen Variablen tempHighNum platziere. Ich werde die HTA-Datei und die Dir.Bat-Datei veröffentlichen. Ich weiß, dass ich das Skript nicht als Funktion mit einem Parameter geschrieben habe. Wenn Sie wirklich einen Parameter verwenden müssen, werde ich versuchen, Ihnen zu helfen, indem Sie die HTA-Datei so ändern, dass der Pfad und Dateiname in einer TextBox eingegeben werden kann. Das sollte es einfacher machen, zu ändern und zu verwenden. Ich habe etwas hinzugefügt und geändert, damit es flüssiger läuft. Ich bin nicht sicher, wie Ihr Skript funktioniert, also lege ich diese HTML-Anwendung für Sie zusammen. Es verwendet eine Stapeldatei mit dem Namen Dir.Bat in C:\Batch, die eine Datei mit der Bezeichnung Data.Txt in c:\Temp erstellt. Dann nimmt das Skript über. Das Skript liest die Datei Data.Txt Zeile für Zeile. Wenn jede Zeile gelesen wird, werden zwei getrennte Anweisungen verwendet, um die Zeichenfolge im Namen der Textdatei zu trennen. Danach sammle ich die Zeichenketten, die Zahlen enthalten, in die Variable ListCol, während ich nach immer größeren Zahlen teste. Ich komme schließlich mit der größten Zahl, die ich in Ihrer ursprünglichen Variablen tempHighNum platziere. Ich werde die HTA-Datei und die Dir.Bat-Datei veröffentlichen. Ich weiß, dass ich das Skript nicht als Funktion mit einem Parameter geschrieben habe. Wenn Sie wirklich einen Parameter verwenden müssen, werde ich versuchen, Ihnen zu helfen, indem Sie die HTA-Datei so ändern, dass der Pfad und Dateiname in einer TextBox eingegeben werden kann. Das sollte es einfacher machen, zu ändern und zu verwenden. Ich habe etwas hinzugefügt und geändert, damit es flüssiger läuft.

<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:&nbsp;</span><span id="Span2" class="Spn2"></span><br/><br/> 
     <span Id="Span3" Class="Spn3">Dir.Bat looks in:&nbsp;</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="&nbsp-Exit-&nbsp"/><!-- Exit Button --> 
    </BODY> 
</HTML> 

Die Dir.Bat Datei anzeigen nächste ist:

@Echo Off 
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt 
Verwandte Themen