Domanda

Non riesco a far funzionare la seguente funzione in VBScript. Sto cercando di ottenere tutti i file in una cartella e scorrere attraverso di essi per ottenere il file con il numero più alto. (il formato del nome file è log_XXX.txt) Il problema che sto riscontrando è che il codice non entra mai nel mio ciclo For Each . Sono nuovo di VBScript, ma non riesco a capire perché questo non funzionerà.

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
È stato utile?

Soluzione

Cambia questa riga:

Set tempHighNum = "000"

a quanto segue:

tempHighNum = "000"

Stai tentando di impostare la variabile tempHighNum su un tipo di stringa. Pertanto, non dovresti usare la parola chiave Set . Set è necessario solo quando si assegnano tipi di oggetto alle variabili.

Altri suggerimenti

Non sono sicuro di come funzioni il tuo script, quindi ho creato questa applicazione HTML per te. Utilizza un file batch chiamato Dir.Bat situato in C: \ Batch che crea un file chiamato Data.Txt situato in c : \ Temp . Quindi prende la sceneggiatura al di sopra di. Lo script legge il file Data.Txt riga per riga. Quando viene letta ogni riga, vengono utilizzate due istruzioni divise per separare la stringa nel nome del file di testo. Successivamente, raccolgo quelle stringhe contenenti numeri nella variabile ListCol mentre cerco numeri sempre più grandi. Finalmente arrivo con il numero più grande che inserisco nella variabile originale tempHighNum . Pubblicherò il file HTA e il file Dir.Bat. So di non aver scritto lo script come una funzione usando un parametro, quindi se hai davvero bisogno di usare un parametro, proverò ad aiutarti cambiando il file HTA per rendere possibile l'inserimento del percorso e del nome del file in una TextBox. Questo dovrebbe renderlo facile cambia e usa. Ho aggiunto e cambiato una o due cose per renderlo più fluido. Non sono sicuro di come funzioni il tuo script, quindi ho creato questa applicazione HTML per te. Utilizza un file batch chiamato Dir.Bat situato in C: \ Batch che crea un file chiamato Data.Txt situato in c : \ Temp . Quindi prende la sceneggiatura al di sopra di. Lo script legge il file Data.Txt riga per riga. Quando viene letta ogni riga, vengono utilizzate due istruzioni divise per separare la stringa nel nome del file di testo. Successivamente, raccolgo quelle stringhe contenenti numeri nella variabile ListCol mentre cerco numeri sempre più grandi. Finalmente arrivo con il numero più grande che inserisco nella variabile originale tempHighNum . Pubblicherò il file HTA e il file Dir.Bat. So di non aver scritto lo script come una funzione usando un parametro, quindi se hai davvero bisogno di usare un parametro, proverò ad aiutarti cambiando il file HTA per rendere possibile l'inserimento del percorso e del nome del file in una TextBox. Questo dovrebbe renderlo facile cambia e usa. Ho aggiunto e modificato una o due cose per renderlo più fluido.

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

Il file Dir.Bat è il prossimo:

@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top