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
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: </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>
Il file Dir.Bat è il prossimo:
@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt