我尝试创建一个脚本,该脚本会在文件夹中的一组子文件夹的名称中插入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语句出了问题。
我通过几个调试器运行了我的脚本,但没有收到任何错误消息。我真的很感激任何额外的帮助,特别是因为编码不是我的强项(显然)。
答案 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"
感谢那些帮助我解决这个问题的人。