VBScript для каждого не работает - PullRequest
4 голосов
/ 30 апреля 2009

Я не могу заставить работать следующую функцию в VBScript. Я пытаюсь собрать все файлы в папке и перебрать их, чтобы получить файл с наибольшим номером. (формат имени файла - log_XXX.txt) У меня проблема в том, что код никогда не входит в мой цикл For Each. Я новичок в VBScript, но я не понимаю, почему это не сработает.

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

Ответы [ 2 ]

11 голосов
/ 30 апреля 2009

Изменить эту строку:

Set tempHighNum = "000"

на следующее:

tempHighNum = "000"

Вы пытаетесь установить для переменной tempHighNum строковый тип. Поэтому не следует использовать ключевое слово Set . Установка необходима только при назначении типов объектов переменным.

1 голос
/ 12 июля 2012

Я не уверен, как работает ваш скрипт, поэтому я собрал это HTML-приложение для вас. Он использует пакетный файл с именем Dir.Bat, расположенный в C:\Batch, который создает файл с именем Data.Txt, расположенный в c:\Temp. Тогда скрипт берет над. Скрипт читает файл Data.Txt построчно. Поскольку каждая строка читается, два оператора split используются для выделения строки в имени текстового файла. После этого я собираю эти строки, содержащие числа, в переменную ListCol, когда проверяю все большие и большие числа. Я, наконец, получаю наибольшее число, которое я помещаю в вашу исходную переменную tempHighNum. Я опубликую файл HTA и файл Dir.Bat. Я знаю, что не писал сценарий как функцию с использованием параметра, поэтому, если вам действительно нужно использовать параметр, я постараюсь помочь вам, изменив файл HTA, чтобы можно было ввести путь и имя файла в TextBox. Это должно облегчить изменить и использовать. Я добавил и изменил одну или две вещи, чтобы они стали более плавными. Я не уверен, как работает ваш скрипт, поэтому я собрал это HTML-приложение для вас. Он использует пакетный файл с именем Dir.Bat, расположенный в C:\Batch, который создает файл с именем Data.Txt, расположенный в c:\Temp. Тогда скрипт берет над. Скрипт читает файл Data.Txt построчно. Поскольку каждая строка читается, два оператора split используются для выделения строки в имени текстового файла. После этого я собираю эти строки, содержащие числа, в переменную ListCol, когда проверяю все большие и большие числа. Я, наконец, получаю наибольшее число, которое я помещаю в вашу исходную переменную tempHighNum. Я опубликую файл HTA и файл Dir.Bat. Я знаю, что не писал сценарий как функцию с использованием параметра, поэтому, если вам действительно нужно использовать параметр, я постараюсь помочь вам, изменив файл HTA, чтобы можно было ввести путь и имя файла в TextBox. Это должно облегчить изменить и использовать. Я добавил и изменил одну или две вещи, чтобы сделать их более плавными.

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

Файл Dir.Bat следующий:

@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...