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
¿Fue útil?

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

El archivo Dir.Bat es el siguiente:

@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top