سؤال

وأنا لا يمكن الحصول على وظيفة التالية في 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
هل كانت مفيدة؟

المحلول

وتغيير هذا السطر:

Set tempHighNum = "000"

ولما يلي:

tempHighNum = "000"

وأنت تحاول تعيين متغير tempHighNum إلى نوع السلسلة. لذلك، يجب عدم استخدام لك <م> تعيين الكلمة. تعيين هو مطلوب فقط عند تعيين أنواع الكائنات إلى المتغيرات.

نصائح أخرى

وأنا لست متأكدا كيف السيناريو الخاص بك يعمل حتى أضع هذا الطلب HTML معا بالنسبة لك. ويستخدم ملف دفعي يسمى Dir.Bat تقع في C:\Batch مما يجعل Data.Txt ملف يسمى تقع في c:\Temp. ثم يأخذ النصي على. السيناريو يقرأ خط ملف Data.Txt سطرا. كما تتم قراءة كل سطر وتستخدم بيانين انقسام لفصل سلسلة في اسم الملف النص. بعد ذلك أقوم بجمع تلك السلاسل تحتوي على أرقام في ListCol متغير وأنا اختبار لأعداد أكبر وأكبر. وأخيرا يختتم مع أكبر عدد الذي أضع في tempHighNum المتغير الأصلي الخاص بك. سأقوم ملف HTA وملف Dir.Bat. وأنا أعلم أنني لم أكتب نصي بوصفها وظيفة باستخدام المعلمة حتى إذا كنت حقا بحاجة إلى استخدام معلمة، وسوف نحاول مساعدتك عن طريق تغيير ملف HTA لتجعل من الممكن لدخول المسار واسم الملف في مربع نص. يجب أن تجعل من السهل على تغيير واستخدامها. وأضفت وغيرت شيئا أو اثنين لجعلها تعمل أكثر سلاسة. أنا لست متأكدا كيف السيناريو الخاص بك يعمل حتى أضع هذا الطلب HTML معا بالنسبة لك. ويستخدم ملف دفعي يسمى Dir.Bat تقع في C:\Batch مما يجعل Data.Txt ملف يسمى تقع في c:\Temp. ثم يأخذ النصي على. السيناريو يقرأ خط ملف Data.Txt سطرا. كما تتم قراءة كل سطر وتستخدم بيانين انقسام لفصل سلسلة في اسم الملف النص. بعد ذلك أقوم بجمع تلك السلاسل تحتوي على أرقام في ListCol متغير وأنا اختبار لأعداد أكبر وأكبر. وأخيرا يختتم مع أكبر عدد الذي أضع في tempHighNum المتغير الأصلي الخاص بك. سأقوم ملف HTA وملف Dir.Bat. وأنا أعلم أنني لم أكتب نصي بوصفها وظيفة باستخدام المعلمة حتى إذا كنت حقا بحاجة إلى استخدام معلمة، وسوف نحاول مساعدتك عن طريق تغيير ملف HTA لتجعل من الممكن لدخول المسار واسم الملف في مربع نص. يجب أن تجعل من السهل على تغيير واستخدامها. وأضفت وغيرت شيئا أو اثنين لجعلها تعمل أكثر سلاسة.

<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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top