使用VBScript中的替换功能重命名一组文件夹

时间:2015-11-10 20:08:52

标签: vbscript

我尝试创建一个脚本,该脚本会在文件夹中的一组子文件夹的名称中插入2个字符。以下是这些文件夹的详细信息:

  • 每个文件夹以14位数字和下划线开头(例如60818400200000 _)

  • 文件夹名称有各种长度

  • 某些文件夹名称的名称中包含其他下划线

脚本需要在第一个下划线后面插入破折号和下划线(-_),或者用下划线破折号下划线(_-_)替换第一个下划线。

之后的每个文件夹应该看起来像[14位数字] _-_ [文件名的其余部分]。

这是我到目前为止所提出的:

Dim objFso, folder, fc, rname as string

Set objFso = CreateObject("Scripting.FileSystemObject")
Set folder = objFso.GetFolder("F:\Eagle_Ford_20130220\TO_LOAD")
Set fc = folder.SubFolders

Set rname = Mid(folder.Name,15,1)

For each folder in fc

    If rname = "_" Then
        rname = rname.replace("_","_-_")

    End If


Next

Wscript.Echo "Finished"

但是,每当我运行此脚本时,我都会收到某种错误消息。如果我没有将rname定义为字符串,我最终会得到一个" Object Required"错误信息。如果我将rname定义为一个字符串(如上面脚本中所示),我最终会得到一个"预期结束语句"错误。

我在网上到处查看我弄错了什么。这里有人愿意指出我正确的方向吗?我会非常感激的! :)

编辑:

在从Rory获得一些指示后,我稍微修改了我的脚本:

Dim objFso, folder, sfolder, rname

Set objFso = CreateObject("Scripting.FileSystemObject")
Set folder = objFso.GetFolder("F:\Eagle_Ford_20130220\TO_LOAD")
Set sfolder = folder.SubFolders


For each n in sfolder

rname = Mid(folder.Name,15,1)

    If rname = "_" Then
        folder.name = rname.replace("_","_-_")

    End If


Next

Wscript.Echo "Finished"

主要更改是重命名我的几个变量并删除重命名变量的Set和字符串定义。我还在For Each语句中移动了我的rname变量,这消除了我一直得到的Object错误。

脚本运行,但不对脚本中列出的文件夹中的子文件夹进行任何更改。我使用Echo命令测试了For Each语句,以确保它正在拾取每个文件夹(它是)。我唯一能得出的结论就是我的If语句出了问题。

我通过几个调试器运行了我的脚本,但没有收到任何错误消息。我真的很感激任何额外的帮助,特别是因为编码不是我的强项(显然)。

2 个答案:

答案 0 :(得分:1)

您的脚本存在一些问题。首先,VBScript不支持强类型变量,因此您不能像使用其他类型的visual basic那样使用As关键字。所以在你的变量声明中摆脱它:

Dim objFso, folder, fc, rname '<-- no "As String"

接下来,您将收到&#34; Object Required&#34;第7行上的错误,因为您只能在VBScript中使用Set关键字和对象引用。 Mid函数返回一个字符串,该字符串不是对象引用,因此是错误。要修复它,只需摆脱Set

rname = Mid(folder.Name,15,1)

此外,您还要重新使用folder变量。您可以通过Set folder = objFso.GetFolder("F:\Eagle_Ford_20130220\TO_LOAD")进行分配,然后通过For each folder in fc在for循环中重新分配。这不应该影响您编写的脚本,但这不是一个好主意 - 它是code smell。如果您更改脚本,可能会在以后导致错误。

答案 1 :(得分:1)

我终于弄清楚我做错了什么。以下是我为其他任何有此问题的人提出的脚本:

'Script to add two (or more) characters to a folder name
Dim objFso, folder, sfolder

Set objFso = CreateObject("Scripting.FileSystemObject")
Set folder = objFso.GetFolder("F:\Eagle_Ford_20130220\Loaded") 'Folder with subfolders to be renamed
Set sfolder = folder.SubFolders


For each folder in sfolder

    'Position to start search of folder name
    rname = Mid(folder.Name,15,1)

    'Search for subfolders with a particular string
    If rname = "_" Then 
        'Add/Replace characters to subfolder name
        rname = Replace(mid(folder.name,15,1),"_","_-_")

        'Write out new subfolder name
        folder.name = left(folder.name,14) & rname & mid(folder.name,16,len(folder.name))

    End If


Next

Wscript.Echo "Finished"

感谢那些帮助我解决这个问题的人。