문제
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 line을 라인별로 읽습니다. 각 줄을 읽으면서 두 개의 분할 문을 사용하여 텍스트 파일의 이름에서 문자열을 분리합니다. 그 후 나는 숫자를 포함하는 문자열을 변수로 수집합니다. ListCol
더 큰 숫자를 테스트 할 때. 마침내 원래 변수에 배치 한 가장 큰 숫자로 감습니다. tempHighNum
. HTA 파일과 dir.bat 파일을 게시하겠습니다. 매개 변수를 사용하여 스크립트를 함수로 작성하지 않았기 때문에 매개 변수를 사용해야하는 경우 HTA 파일을 변경하여 텍스트 상자에 경로와 파일 이름을 입력 할 수 있도록 도와 드리겠습니다. 그것은 쉽게 바꾸고 사용할 수 있어야합니다. 나는 그것을 더 매끄럽게 만들기 위해 한두 가지를 추가하고 변경했습니다. 귀하의 스크립트가 어떻게 작동하는지 잘 모르겠 으므로이 HTML 응용 프로그램을 구성합니다. 호출 된 배치 파일을 사용합니다 Dir.Bat
에 위치한 C:\Batch
파일을 호출합니다 Data.Txt
에 위치한 c:\Temp
. 그런 다음 스크립트가 인수됩니다. 스크립트는 파일 data.txt line을 라인별로 읽습니다. 각 줄을 읽으면서 두 개의 분할 문을 사용하여 텍스트 파일의 이름에서 문자열을 분리합니다. 그 후 나는 숫자를 포함하는 문자열을 변수로 수집합니다. 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: </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>
dir.bat 파일은 다음입니다.
@Echo Off
Dir/B c:\Temp\Log_???.Txt>c:\Temp\Data.Txt