使用目标文件名的变量重命名文件时获取“错误的文件名或编号”

时间:2013-06-25 12:11:52

标签: vbscript windows-7-x64

我正在尝试循环一个充满.html文件的文件夹并在文件的开头添加一些代码(虽然我在插入代码之前得到一些不需要的换行符)并且还要抓取{的内容{1}}标记并使用它来重命名每个文件。

我用-'s

替换空格和不需要的字符

所有这些都有效,但我也尝试将现有文件(<title>是一个示例)重命名为Default0010.html中的文字。

这也有效,但当我尝试将现有文件移动到新文件时,我得到一个<title>,但是当我明确地将目标文件名设置为一个简单的字符串时,它就可以工作。

这使我的字符串不干净,或者您无法使用变量作为目的地。

另请注意Bad File name or NumberDim ii = i + 1行。

这是在我测试脚本的时候添加的,然后当我很开心的时候我会按照我想要的方式在所有HTML文件上运行它。

If i=1 Then Exit For

1 个答案:

答案 0 :(得分:1)

请勿替换已知的错误字符。替换 已知良好字符的所有内容,例如使用正则表达式:

Set re = New RegExp
re.Pattern = "[^a-z0-9+._-]+"
re.Global  = True
re.IgnoreCase = True

NewFilename = re.Replace(OldFilename, "_")

下划线(_)通常是这种替代品的安全特征。

此外,除非必须,否则不要尝试手动解析HTML文件中的元素。在您的情况下,标题可以更容易提取,如下所示:

Set html = CreateObject("HTMLFile")
html.Write objFso.OpenTextFile(File.Name).ReadAll
title = html.Title

它甚至会崩溃并为你修剪空白。

当您已经拥有该文件的句柄时,只需更改其Name属性即可重命名文件:

objFile.Name = NewFilename

脚本的简化版本(没有那些修改文件内容的部分):

Set fso = CreateObject("Scripting.FileSystemObject")

htmlFolder = "C:\My Web Sites\test\www.test.org.uk\html"

Set re = New RegExp
re.Pattern = "[^a-z0-9+._-]+"
re.Global  = True
re.IgnoreCase = True

For Each f In objFso.GetFolder(htmlFolder).Files
   data = f.OpenAsTextStream.ReadAll

   Set html = CreateObject("HTMLFile")
   html.Write data

   oldname = f.Name
   newname = re.Replace(f.Name, "_")

   f.Name = newname
Next