Pregunta
No puedo hacer que la siguiente función en VBScript funcione. Estoy tratando de obtener todos los archivos en una carpeta y recorrerlos para obtener el archivo con el número más alto. (el formato del nombre de archivo es log_XXX.txt) El problema que tengo es que el código nunca ingresa a mi bucle For Each
. Soy nuevo en VBScript, pero parece que no entiendo por qué esto no funciona.
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
Solución
Cambiar esta línea:
Set tempHighNum = "000"
a lo siguiente:
tempHighNum = "000"
Está intentando establecer la variable tempHighNum en un tipo de cadena. Por lo tanto, no debe usar la palabra clave Establecer . Establecer solo es necesario cuando se asignan tipos de objetos a variables.
Otros consejos
No estoy seguro de cómo funciona su script, así que armé esta aplicación HTML para usted. Utiliza un archivo por lotes llamado Dir.Bat
ubicado en C: \ Batch
que crea un archivo llamado Data.Txt
ubicado en c : \ Temp
. Entonces el guión toma
terminado. El script lee el archivo Data.Txt línea por línea. A medida que se lee cada línea, se usan dos declaraciones divididas para separar la cadena en el nombre del archivo de texto. Después de eso, recopilo esas cadenas que contienen números en la variable ListCol
mientras pruebo números cada vez más grandes. Finalmente termino con el número más grande que coloco en su variable original tempHighNum
. Publicaré el archivo HTA y el archivo Dir.Bat. Sé que no escribí el script como una función usando un parámetro, por lo que si realmente necesita usar un parámetro, intentaré ayudarlo cambiando el archivo HTA para que sea posible ingresar la ruta y el nombre del archivo en un TextBox. Eso debería hacer que sea fácil
cambiar y usar. Agregué y cambié una o dos cosas para que funcione mejor.
No estoy seguro de cómo funciona su script, así que armé esta aplicación HTML para usted. Utiliza un archivo por lotes llamado Dir.Bat
ubicado en C: \ Batch
que crea un archivo llamado Data.Txt
ubicado en c : \ Temp
. Entonces el guión toma
terminado. El script lee el archivo Data.Txt línea por línea. A medida que se lee cada línea, se usan dos declaraciones divididas para separar la cadena en el nombre del archivo de texto. Después de eso, recopilo esas cadenas que contienen números en la variable ListCol
mientras pruebo números cada vez más grandes. Finalmente termino con el número más grande que coloco en su variable original tempHighNum
. Publicaré el archivo HTA y el archivo Dir.Bat. Sé que no escribí el script como una función usando un parámetro, por lo que si realmente necesita usar un parámetro, intentaré ayudarlo cambiando el archivo HTA para que sea posible ingresar la ruta y el nombre del archivo en un TextBox. Eso debería hacer que sea fácil
cambiar y usar. Agregué y cambié una o dos cosas para que funcione mejor.
<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>
El archivo Dir.Bat es el siguiente:
@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt