从命令行替换纯文本文件中的文本

命令行工具的Windows库中缺少一个非常有用的功能是能够替换纯文本文件中的文本。 这样的功能可以用于许多系统管理员执行的各种实际任务,例如:

  • 更新配置/ INI文件以替换UNC路径。
  • 批量更新存储在终端/ Citrix服务器上的INI文件中的用户信息。
  • 与脚本结合使用以部署“模板”数据,然后将值应用于复制的文件。

我们的解决方案是一个VBScript与Visual Basic替换功能接口。 通过将此脚本放置在Windows PATH变量中的位置,您现在可以使用此功能。

用途

一旦在您的系统上,您可以通过简单地使用ReplaceText命令来调用脚本。 以下几个例子将说明您可以使用此方法的方式:

在C:DataValues.csv文件中将“null”替换为“n / a”:

ReplaceText“C:DataValues.csv”null n / a

扫描C:Users(+子目录)文件夹中的所有INI文件,用“Server = New”替换所有出现的“Server = Old”,并使用不区分大小写的搜索:

FORFILES / P“C:Users”/ M * .ini / S / C“Cmd / C ReplaceText @path Server = Old Server = New / I”

使用区分大小写的搜索,扫描当前用户配置文件中的所有CFG文件,将“p @ ssw0rd”替换为“PA $$ woRd”:

FORFILES / P“%UserProfile%”/ M * .cfg / S / C“Cmd / C ReplaceText @path p @ ssw0rd PA $$ woRd”

正如你可以看到下面,脚本是非常简单,可以很容易地修改,以适应任何特殊情况下,你可能有。 或者,您可能希望创建脚本的副本,其硬编码特定值,以便可以双击执行命令和/或允许您轻松地将其分发给其他人。

剧本

替换文本
“作者:Jason Faulkner
SysadminGeek.com

此脚本应放置在系统的PATH变量中指定的文件夹中。

用法(WScript):
ReplaceText FileName OldText NewText [/ I]

/ I(可选) - 文本匹配不区分大小写

设置oArgs = WScript.Arguments

intCaseSensitive = 0
对于i = 3到oArgs.Count-1
如果UCase(oArgs(i))=“/ I”则intCaseSensitive = 1
下一个

设置oFSO = CreateObject(“Scripting.FileSystemObject”)

如果不是oFSO.FileExists(oArgs(0))那么
WScript.Echo“指定的文件不存在。
其他
设置oFile = oFSO.OpenTextFile(oArgs(0),1)
strText = oFile.ReadAll
oFile.Close

strText = Replace(strText,oArgs(1),oArgs(2),1,-1,intCaseSensitive)

设置oFile = oFSO.OpenTextFile(oArgs(0),2)
oFile.WriteLine strText
oFile.Close
万一


补充笔记

默认情况下,Windows使用WScript执行VBScript(VBS)文件。 这可能导致的唯一问题是任何错误和/或来自脚本的消息将作为弹出框显示。 对于命令行工具,最好是这些消息显示在控制台中。 有几种方法可以实现这一点。

通过从命令提示符(具有管理员权限)运行此命令,将VBScript文件的默认处理程序更改为CScript:

CScript // H:CScript

使用CScript命令显式运行ReplaceText脚本:

CScript“C:PathToReplaceText.vbs”// B FileName OldText NewText [/ I]

作为特殊情况,从批处理脚本执行ReplaceText通常意味着CScript作为引擎使用,而不考虑默认处理程序。 你一定要测试这个,但在依赖这个功能之前。

从SysadminGeek.com下载ReplaceText脚本

赞 (0)
分享到:更多 ()