我在vb脚本中有这一行:
fileCheck = Right(objLookFile.name, len(objLookFile.name) - len("Audit_######_"))
Audit_######_
现在需要6位数。我遇到的情况是我有7位和8位的文件。
文件名:Audit_1002611_Comnpany_MTH_11_2013.00001.txt
如何更改######
以接受任意数量的数字?
dim lookFor
lookFor = fiRef(i_fi) & "_" & AIOType(i_type) & "_" & Right("00" & (month(processDate + 1)), 2) & "_" & Year(processDate + 1) & ".00001.txt"
dim minLen
minLen = len(lookFor)
dim objLookFolder, objLookFile
set objLookFolder = objFSO.GetFolder(AIODVDDir)
For each objLookFile in objLookFolder.files
if Len(objLookFile.name) >= minLen then
dim fileCheck
fileCheck = Right(objLookFile.name, len(objLookFile.name) - len("Audit_######_"))
if (Left(objLookFile.name, len("Audit_")) = "Audit_") AND (fileCheck = LookFor) then
'found the audit file
谢谢
答案 0 :(得分:1)
嗯,除了获得它的长度之外,你不是用<{1}}做任何事情。 看起来就像剥夺前13个字符的黑客方法一样。
更智能方式可能是在第二个下划线之后获取所有内容:
"Audit_######_"
答案 1 :(得分:1)
有几种方法可以解决这个问题。建议使用D Stanley建议的字符串操作是一种方法。另一种方法是将文件名拆分为下划线并检查片段:
arr = Split(objLookFile.Name, "_", 3)
If UBound(arr) = 3 Then
If arr(0) = "Audit" And IsNumeric(arr(1)) And arr(2) = lookFor Then
...
End If
End If
使用正则表达式可能是最好的方法:
Set re = New RegExp
re.Pattern = "Audit_\d+_" & fiRef(i_fi) & "_" & AIOType(i_type) _
& "_" & Right("00" & (month(processDate + 1)), 2) _
& "_" & Year(processDate + 1) & "\.00001\.txt"
For Each objLookFile In objFSO.GetFolder(AIODVDDir).Files
If re.Test(objLookFile.Name) Then
...
End If
Next
\d+
将匹配一个或多个数字。如果您想匹配有限数量的数字(例如,至少6位,最多8位数),请用\d{6,8}
替换该模式的那一部分。