使用目标文件名变量重命名文件时出现“错误文件名或编号”

2023-12-03

我正在尝试循环一个充满 .html 文件的文件夹,并在文件的开头添加一些代码(尽管我在插入的代码之前遇到了一些不需要的换行符),并且还获取了<title>标记并使用它来重命名每个文件。

我用 - 替换空格和不需要的字符

所有这些都有效,但我也尝试重命名现有文件(Default0010.html是一个例子)到文本<title>.

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

这让我觉得我的字符串不干净,或者你不能使用变量作为目标。

另外请忽略这些行Dim i, i = i + 1 and If i=1 Then Exit For.

这是在我测试脚本时添加的,然后当我很高兴它实现了我想要的功能时,我会在所有 HTML 文件上运行它。

Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFSO.GetFolder("C:\My Web Sites\test\www.test.org.uk\html")

Dim i

Dim ObjFsoFile
Dim ObjFile
Dim StrData
Dim StrTitleTag
Dim OldFilename
Dim NewFilename
Set ObjFsoFile = CreateObject("Scripting.FileSystemObject")

'Loop all of the files
For Each File In Folder.Files
  'Get contents of the file and store in a string
  'Opening the file in READ mode
  Set ObjFile = ObjFsoFile.OpenTextFile(File.Name)

  'Reading from the file
  StrData = ObjFile.ReadAll
  'Add the Perch include to the beginning
  StrData = replace(StrData,"<?php include('cms/runtime.php');?>","") 'Remove the Perch include in-case we are re-running this
  StrData = replace(StrData,"<!DOCTYPE HTML PUBLIC " & Chr(34) & "-//W3C//DTD HTML 4.0 Transitional//EN" & Chr(34) & ">","<?php include('cms/runtime.php');?>" & vbcrlf & "<!DOCTYPE HTML PUBLIC " & Chr(34) & "-//W3C//DTD HTML 4.0 Transitional//EN" & Chr(34) & ">")     
  'Msgbox StrData

  'Closing the file
  ObjFile.Close

  'Write the changes to the current file
  Set objFile = objFSO.CreateTextFile(File.Name,True)
  objFile.Write StrData
  objFile.Close

  'Re-write the contents of the current file and replace with the StrData Above

  'Grab the contents between <title> and </title>

  parse_string1 = StrData 'see above post 
  parse_string1 = replace(parse_string1,"<title>","¦") 
  parse_string = split(parse_string1,"¦") 
  parse = parse_string(1) 
  parse_string1 = replace(parse,"</title>","¦") 
  parse_string = split(parse_string1,"¦") 
  parsed_string = parse_string(0)

  StrTitleTag = parsed_string 'gives final result

  'Save old filename of current file to a string
  OldFilename = File.Name
  'Msgbox OldFilename

  'Rename current file to the above contents of between <title> and </title>
  'Replace spaces with - characters in the filename.

  Dim divider
  divider = "-"

  'Replace & with and
  NewFilename = Replace((StrTitleTag & ".php"),"&","and")
  'Replace triple space with single space     
  NewFilename = Replace(NewFilename,"   "," ")
  'Replace double space with single space
  NewFilename = Replace(NewFilename,"  "," ")
  'Replace - with space
  NewFilename = Replace(NewFilename," ",divider)
  'Replace ---- with -
  NewFilename = Replace(NewFilename,divider & "-" & divider,divider)      
  'Replace ---- with -
  NewFilename = Replace(NewFilename,divider & divider & divider,divider)          
  'Replace ,- with -
  NewFilename = Replace(NewFilename,"," & divider,divider)
  'Replace LineBreaks with nothing (remove line breaks)
  NewFilename = Replace(NewFilename,vbCrLf,"")    
  NewFilename = Replace(NewFilename,vbLf,"")  
  NewFilename = Replace(NewFilename,vbCr,"")  
  NewFilename = LCase(NewFilename)
  'Msgbox NewFilename

  'Loop through all files
  For Each File2 In Folder.Files
    'Opening the file in READ mode
    Set ObjFile = ObjFsoFile.OpenTextFile(File2.Name)

    'Get contents of the file and store in a string         
    'Reading from the file
    StrData = ObjFile.ReadAll

    'Closing the file
    ObjFile.Close

    'Replace all occurences of the old filename with the new filename
    StrData = Replace(StrData, OldFilename, NewFilename)

    'How to write file
    Set objFile = objFSO.CreateTextFile(File2.Name,True)
    objFile.Write StrData
    objFile.Close
  Next

  'Rename Old file with the new filename  
  If objFso.FileExists("C:\My Web Sites\test\www.test.org.uk\html\" & OldFilename) Then
    'NewFileName = "test.php"
    'NewFileName = "test-test-test-test-test-test-test-test-test.php"
    Msgbox "Renaming the file " & OldFilename & " (Length: " & Len(OldFilename)     & ") with the following name: " & NewFilename & " (Length: " & Len(NewFilename) & ")"
    Msgbox "Compare: test-test-test-test-test-test-test-test-test.php " & NewFilename
    objFso.MoveFile "C:\My Web   Sites\test\www.test.org.uk\html\" & OldFilename, "C:\My Web     Sites\test\www.test.org.uk\html\" & NewFileName
  End If

  i = i + 1
  If i=1 Then Exit For
Next

不要替换已知的坏字符。替换所有内容not a 已知良好字符,例如通过使用正则表达式:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用目标文件名变量重命名文件时出现“错误文件名或编号” 的相关文章

  • msscript.ocx 从哪里安装

    我在我的应用程序中使用 msscript ocx 它是 Windows 的 ActiveX 脚本主机 尽管我希望能够对高度可定制的 XP 嵌入式 XPe 使用相同的功能 1 我想知道在XPe上是否可以选择性安装msscript ocx 2
  • 如何在.net core或.net standard项目中运行VBScript?

    我知道这是死胡同而且愚蠢的想法 但仍然 您知道在 Net Core 或 Net Standard 项目中运行 VBScript 的任何 nuget 或解决方法吗 我尝试使用 ClearScript V8 nuget https www nu
  • 使用VBS脚本检查字符串是否包含特定字符

    我的脚本正在做以下几点 检索所有我选择的文件夹文件 按日期对它们进行分类 从最近的到较早的 在窗口中显示它们 这是我的 VBS 脚本 我检索它here http codes sources commentcamarche net sourc
  • 使用 VBScript 检查排序顺序

    假设我有一个数组 arr1 其中包含日期值 如下所示 Arr1 50 9 3 2012 4 57 02 AM 22 3 2012 5 57 02 AM 9 5 2012 8 57 02 AM 9 3 2011 4 57 02 上午 Edit
  • 如何将 VBScript 转换为可执行 (EXE) 文件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我四处寻找转换 VBScript 的信息 vbs 到可执行文件 并意识到大多数可用的工具实际上是将脚本包装在可执行文件中 尝试了一些工
  • WScript.Shell.Exec - 从 stdout 读取输出

    我的 VBScript 不显示我执行的任何命令的结果 我知道命令被执行 但我想捕获结果 我已经测试了多种方法来执行此操作 例如以下方法 Const WshFinished 1 Const WshFailed 2 strCommand pin
  • 使用 javascript 获取选择标签的名称

    我在任何地方都没有找到这个问题 所以我将其发布在这里 我有一堆选择标签 部分使用 VBScript 命名 我希望能够获取从 javascript 中的 onchange 事件调用的选择标签的名称 这是代码
  • 有关于 VBScript 正则表达式对象 (RegExp) 的好文档吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们都知道每个正则表达式实现都有其自身的特点 我需要在使用 COM 自动化的应用程序中使用 Micros
  • VBscript 以提升的权限运行 bat 文件

    这是我的bat文件 REG DELETE HKLM Software Microsoft Windows CurrentVersion WindowsUpdate v SusClientId f REG DELETE HKLM Softwa
  • 我对一些小概念感到困惑

    我对 VBscript 非常陌生 正在努力学习所有概念 在我的实践过程中 我一直有一个疑问 dim a b c set a CreateObject scripting filesystemobject initiate the file
  • VBScript:从 Scripting.Dictionary 中对项目进行排序

    我有下面的代码 它获取这样的数据 姓名 1 姓名 4 姓名 2 姓名 3 并像这样列出 是一个复选框 姓名 1 姓名 4 姓名 2 姓名 3
  • 经典的asp字符编码

    我在经典 asp 网站中遇到西班牙字符问题 用户可以在 aspx 页面上的表单中提交他们的姓名 地址 然后 aspx 页面将 ajax post 发送到经典的 asp 页面 它所做的所有操作都存储在我们的 Sql 2008 DB 中 我可以
  • 捕获 Unicode 文本(西里尔文)并将其插入 MS Access 数据库

    我继承了一个旧的 Web 应用程序 该应用程序使用经典 ASP 将表单中收集的数据写入 Access 2007 数据库 现在他们需要它能够收集西里尔字母的输入 我完全不熟悉代码页 字符集 也不熟悉非拉丁字母 我尝试将输入表单页面上的字符集更
  • 使用 VBScript 切换当前活动声音设备?

    我想在连接到我的计算机 Windows 7 32 位 的两个音频设备之间切换 我看了一下question https stackoverflow com questions 35709 change active sound card on
  • 在vbscript中读取文本文件的某一行

    有没有办法使用 vbscript 读取文本文件的某一行并将其存储为变量 谢谢 试试这个例子 Option Explicit Dim ws MyFile Set ws CreateObject WScript Shell MyFile Win
  • 如何使用 VBScript 读取 .zip 文件的内容而不实际解压文件?

    我有一个以父目录开头的 zip 文件 我需要从文件中读取该目录 然后搜索我的硬盘以查看该目录名称是否已存在 如果存在 我会将其删除并替换为 zip 文件的内容 所有这些我都可以做 除了读取 zip 而不实际解压缩文件 zip 文件的大小可以
  • ATL创建的COM接口继承IDispatch但后期绑定不起作用

    这是我的 IDL 文件 IFrame 是一个双接口 同时继承了 IDispatch 和 IUnknown object uuid C5AD0517 37FC 479C 9C7A A063B17E4A2E dual nonextensible
  • Google Chrome 总是说“Google Chrome 没有正确关闭”[重复]

    这个问题在这里已经有答案了 我在 VBS 文件脚本中使用此代码自动关闭 Chrome 浏览器 Set objExec browobj Exec tasklist fi Chr 34 imagename eq chrome exe Chr 3
  • Windows Kernel32.BatteryLifePercent = 255

    我正在尝试构建一个 Java 应用程序 该应用程序读取笔记本电脑电池的状态 并在电池电量低时向用户发送通知 为了做到这一点 我将 jna 与 Kernel32 本机库一起使用 如该问题的第一个答案中所述 如何获取Windows系统中的剩余电
  • 如果文本文件已存在,则将文本追加到文本文件中

    我有一个正在运行的脚本 用于替换固定宽度文件中的某些字符 从第 2 行开始 如果目标文件已经存在 希望避免覆盖目标文件 相反 如果存在 则将行 从源文件的第 2 行开始 追加到目标文件的末尾 我正在努力寻找有适当建议的线索 这是当前的代码

随机推荐

  • 如何通过代码打开窗口的系统菜单?

    我有一个 C WinForms 无边框窗口 我重写 WndProc 并处理 WM NCHITTEST 消息 对于这种形式的区域 我的命中测试函数返回 HTSYSMENU 双击该区域成功关闭窗体 但右键单击它不会显示窗口的系统菜单 在任务栏中
  • Core Data SUBQUERY 和 NSFetchedResultsController 的键路径错误

    如果这是重复的 我们深表歉意 20 分钟的搜索没有找到确切的情况或解决方案 我有一个包含三个类的核心数据堆栈XClass YClass and ZClass XClass与 具有一对多关系YClass YClass与 具有一对多关系ZCla
  • 为什么此 toDataURL 行是安全错误?

    如果将来自另一个站点的图像加载到页面 然后将其作为合成中的部分成分写入画布 请使用 context drawImage image 0 0 w h 似乎任何不安全的事情都已经在画布上发生了 那为什么会 window location can
  • 长按NavigationView只能作用于左侧部分,不能作用于所有NavigationLink?

    下面是一个NavigationView 视图弹出到Destination2当长按 NavigationLink 并Destination1正常点击时 但图中NavigationLink的右侧区域无法长按 有谁知道原因吗 谢谢 import
  • WIX:继续安装之前应关闭以下应用程序

    我的应用程序有托盘图标 当我卸载它时 我有一个窗口 其中建议关闭 my tray app exe 带有文本 在继续安装之前应关闭以下应用程序 我使用wix CloseApplication Element Util Extension 来关
  • 如何使用 javafx-maven-plugin 运行包含 jfoenix 的 Maven java fx 项目

    我试图创建编译我的应用程序并创建一个可执行文件 目前我认为最好使用的工具是 javafx maven plugin 我无法让它工作 所以我从根据此创建项目时生成的基本代码开始 https www youtube com watch v 4v
  • Google Gmail SMTP 设置不允许我使用 PHPMailer 发送电子邮件

    我在 Gmail 上创建了一个帐户 因为前一个帐户也给我带来了同样的问题 以便我的应用程序可以使用 google smtp 服务器发送电子邮件 我正在使用 PHPMailer 库并要求它显示任何日志错误 我总是收到类似的消息 它略有不同 有
  • Android 中的 RTSP 客户端

    可能有人问过同样的问题 但我没有找到任何适合我的解决方案 我正在尝试在 android 中播放 RTSP 流 服务器是 Darwin 流服务器 目前我尝试了VideoView和MediaPlayer 当我使用3G时 这两个都工作正常 但有时
  • 确定 PHP 调用函数的位置

    你们知道我如何从哪个文件中确定该函数内部调用的函数吗 我正在考虑使用 debug backtrace 但这看起来并不是一种优雅的方式 而且他们还在另一个问题中列举了其他原因here 那么还有什么其他选择呢 多谢 我前段时间从某个地方借用了这
  • 在 Angular2 路由中使用 Resolve

    在 Angular 1 中我的配置如下所示 routeProvider when news templateUrl newsView html controller newsController resolve message functi
  • Umbraco 7 更新 Umbraco 路线

    我正在尝试创建一个 Umbraco 7 MVC 应用程序 在此过程中 我希望能够创建在幕后管理数据的自定义控制器 通过我的研究 我发现使用 SurfaceController 是最成功的 但是 该路线将 umbraco surface 添加
  • 如何在 apache 服务器上运行 socket.io(仅限客户端)

    我想在我的 apache 服务器上运行 socket io 的客户端 我已将 socket io 目录上传到我的网络服务器 并尝试了主站点的简单客户端连接示例套接字 io但它不起作用 我不知道需要什么才能让它工作并连接我正在运行的服务器 我
  • 将参数传递给返回集合的 OData (GET) 方法

    我在用OData v3 如何将参数传递给OData控制器并返回一个集合 我正在尝试做的示例 EnableQuery AllowedQueryOptions AllowedQueryOptions All public IQueryable
  • Firestore Cloud Function 空集合

    我有一个问题困扰了我好几天 我正在尝试创建一个从 Firestore 数据库读取的 Firebase Cloud 函数 我的 Firestore 数据库如下所示 问题是我无法列出users像这样 db collection users ge
  • Azure DevOps管道:取消队列中的多个待处理作业

    在 Azure DevOps 管道中 如何取消作业池的所有待处理作业 我有很多工作在排队 但看不到在哪里可以取消我正在等待的所有工作 Azure Devops 尚不具备从 UI 部分批量取消所有待处理作业的功能 您可以编写脚本来调用rest
  • 我可以有一个空的 Java 类吗?

    我正在创建一个基于网格的游戏 我需要实现一组在网格内占据随机位置的障碍物 我创建了一个抽象类ALifeForm 它保存网格中每个项目的通用方法 显然 抽象类无法初始化 所以我要创建一个新类AObstacle 这将延长ALifeForm 唯一
  • 模板实例化检查类中存在的成员

    我有一组类 其中有一个或多个类型为memberA memberB memberC 的成员 并非所有班级都有所有成员 我想创建一个模板来设置成员 例如 template
  • Getresponse API 2(使用 PHP 添加自定义字段和联系人)

    我对编码和 Web 开发还很陌生 而深入研究 API 是我希望自己从未做过的事情 然而话虽这么说 我的进步比预期的要远 我现在在尝试将自定义字段添加到添加联系人功能时遇到问题 我试图获取代码以在用户点击我的感谢页面时添加隐藏的表单输入字段
  • 为什么我无法在 Mac OS Sierra 上安装 Sass?

    我已经尝试在 Mac OS Sierra 10 12 上从终端输入以下代码安装 Sass 3 次 sudo gem install sass 然后它要求我输入密码 我输入密码 但没有任何反应 我什至等了半个小时 它甚至没有给出任何错误或任何
  • 使用目标文件名变量重命名文件时出现“错误文件名或编号”

    我正在尝试循环一个充满 html 文件的文件夹 并在文件的开头添加一些代码 尽管我在插入的代码之前遇到了一些不需要的换行符 并且还获取了