【问题标题】:VBS script to rename files using the pathname使用路径名重命名文件的 VBS 脚本
【发布时间】:2016-10-14 22:51:13
【问题描述】:

我是 VBS 脚本的新手,之前我用 Excel VBA 做过一些事情。现在我有一个脚本,它用文件的路径名重命名单个文件(每个被截断为 4 个字母))见下文。这是一些我修改了一下以适应我的目的的脚本。但是,我想自动化文件重命名过程并重命名文件夹及其子文件夹中的所有文件,就像 scipt 处理单个文件一样。有人可以帮我解答这个问题吗?

Set Shell = WScript.CreateObject("WScript.Shell")
Set Parameter = WScript.Arguments
For i = 0 To Parameter.Count - 1
    Set fso = CreateObject("Scripting.FileSystemObject")
    findFolder = fso.GetParentFolderName(Parameter(i))
    PathName = fso.GetAbsolutePathName(Parameter(i))
    FileExt = fso.GetExtensionName(Parameter(i))
    Search = ":"
    findFolder2= Right(PathName, Len(PathName) - InStrRev(PathName, Search))
    arr = Split(findFolder2, "\")
    For j=0 To UBound(arr)-1
    arr(j) = ucase(Left(arr(j), 4))
    Next
    joined = Join(arr, "%")   
    prefix = right(joined, len(joined)-1)    
    fso.MoveFile Parameter(i), findFolder + "\" + prefix 
next

希望我能得到一些有用的想法。

赫比

【问题讨论】:

    标签: vbscript rename


    【解决方案1】:

    走一棵树需要递归,每个级别的函数都会调用自己。

    On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dirname = InputBox("Enter Dir name")
    ProcessFolder DirName
    
    Sub ProcessFolder(FolderPath)
        On Error Resume Next
        Set fldr = fso.GetFolder(FolderPath)
    
        Set Fls = fldr.files
        For Each thing in Fls
             msgbox Thing.Name & " " & Thing.DateLastModified 
        Next
    
        Set fldrs = fldr.subfolders
        For Each thing in fldrs
            ProcessFolder thing.path
        Next
    
    End Sub
    

    来自有关如何运行另一个文件的帮助。

    Set Shell = WScript.CreateObject("WScript.Shell")
    shell.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 
    

    所以在循环之外,

    Set Shell = WScript.CreateObject("WScript.Shell")
    

    在循环中

    shell.Run("wscript Yourscript.vbs thing.name, 1, True) 
    

    此外,VBS 帮助文件最近已在 MS 网站上删除。它可以在我的 Skydrive 上找到,地址为 https://1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjw 它叫做 script56.chm。

    【讨论】:

    • 您好,非常感谢您的帮助。我试图用我当前的脚本替换带有 msgbox 的行,希望如果它为每个文件调用脚本,这将起作用,但它失败了。如果我只插入thing.name =“hello.txt”,它只会重命名一个文件......我是否需要为我的重命名脚本编写一个单独的子,然后从事物中调用它。对象?
    • 啊...好吧,这是因为它不能重命名多个同名文件...使用
    • 嗨...非常感谢。这已经很有帮助了。我设法使用一个非常简单的参数重命名所有文件,例如 thing.name = i & ".txt" ,其中 i 是一个迭代器。但是,我重命名文件的过程非常复杂。因此,一旦我想合并脚本,它就不起作用。是否有可能按原样使用我的脚本,然后从递归中调用它?非常感谢-
    • 进行了编辑。此外,VBS 帮助文件最近已在 MS 网站上删除。它可以在我的 Skydrive 上1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjw 找到它叫做 script56.chm。
    • Shell.Run("WScript rename.vbs thing.name, 1, True")
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多