【发布时间】:2015-11-10 20:08:52
【问题描述】:
我正在尝试创建一个脚本,该脚本将在文件夹中的一组子文件夹的名称中插入 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 定义为字符串,我最终会收到“需要对象”错误消息。如果我将 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 语句有问题。
我已经通过几个调试器运行了我的脚本,但没有收到任何错误消息。我非常感谢任何额外的帮助,尤其是因为编码不是我的强项(显然)。
【问题讨论】:
-
VBScript 中不存在强类型,即不能使用
rname as string。如果你把它关掉,就像你说的那样,object required 错误发生在哪里? -
另外,您正在重新使用
folder变量。您通过Set folder = objFso.GetFolder("F:\Eagle_Ford_20130220\TO_LOAD")分配它,然后通过For each folder in fc在for 循环中再次分配它。只是指出这一点。不是一个好主意——这是一种代码味道。 -
第 7 行,字符 1,它是 rname 的设置行。
标签: vbscript