VB脚本将操纵文件名

时间:2014-09-05 15:50:29

标签: vbscript filenames

好的,就像很多其他人一样,我是VB Scripting的菜鸟。我要做的是创建一个VB脚本,将操作文件名从Fulton A1032-CCC Adamsville到A1032-CCC。我浏览了许多网站试图找到答案,但只是在那个中途工作。

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='H:\Darrell 2014 folder\Distview Wiki Revamp\To'} Where " _
    & "ResultClass = CIM_DataFile")

For Each objFile In colFiles
    strPath = objFile.Drive & objFile.Path
    strExtension = objFile.Extension
    strFileName = objFile.FileName

    If Left(strFileName, 7) = "Fulton " Then
        intLength = Len(strFileName)
        strFileName = Right(strFileName, intLength - 7)
    End If

    If Right(strFileName, 10) = " Adamsville" Then
        intLength = Len(strFileName)
        strFileName = Left(strFileName, intLength - 10)
    End If

    strNewName = strPath & strFileName & "." & strExtension
    errResult = objFile.Rename(strNewName)
Next  

请帮助

2 个答案:

答案 0 :(得分:1)

为什么不直接使用替换功能呢?例如:

Dim fileName As String

fileName = "Fulton A1032-CCC Adamsville"

fileName = Replace(fileName, "Fulton ", "")
fileName = Replace(fileName, " Adamsville", "")

MsgBox fileName

输出为A1032-CCC。如果搜索字符串中的任何一个或两个都不存在,这也有效。

答案 1 :(得分:-2)

学会数数:

>> WScript.Echo Len(" Adamsville")
>>
11
>>

或写一个函数:

>> Function endsWith(b, t)
>>   endsWith = Right(b, len(t)) = t
>> End Function
>> WScript.Echo CStr(endsWith("Fulton A1032-CCC Adamsville", " Adamsville"))
>>
True

更新wrt downvotes:

由于支票表明至少有两个人无法计算:

Option Explicit

Function qq(s) : qq = """" & s & """" : End Function

Dim strFileName : strFileName = "Fulton A1032-CCC Adamsville"
Dim intLength
WScript.Echo 0, qq(strFileName)

' assume the structure of the input data is:
' <todelete+blank><tokeep><blank+todelete>
WScript.Echo 1, qq(Split(strFileName)(1))

' the ot's code 'works' if you count correctly
If Left(strFileName, 7) = "Fulton " Then
    intLength = Len(strFileName)
    strFileName = Right(strFileName, intLength - 7)
End If
If Right(strFileName, 11) = " Adamsville" Then
    intLength = Len(strFileName)
    strFileName = Left(strFileName, intLength - 11)
End If
WScript.Echo 2, qq(strFileName)

输出:

cscript 25689666.vbs
0 "Fulton A1032-CCC Adamsville"
1 "A1032-CCC"
2 "A1032-CCC"