Linux下面进行字符串的替换倒是比较方便,有很多支持的命令,如SED等都是非常的方便,现在有需求要在WINDOWS下面实现运行字符串内容的替换,因为要根据不同的环境使用不同的配置文件中的值,于是就准备写一个DOS版的替换函数。
DOS下面也是有替换功能的,如使用:
@echo off
set aa=Hello Lily.
echo Replace Before:%aa%
echo Replace After:%aa:Lily=Tom%
pause
也能够实现字符串的替换,不过后面发现,当替换的内容中有如等号“=”等特殊符号时,这个函数就没有办法正常工作了,尝试对特殊符号进行转码也不行。
后面采用一种变通的方式实现:使用VBS,它是VB的一个子集,功能还是蛮强大的,这其中需要注意的就是给VBS传参数需要通过通过环境变量传递,如下:
set tch=wscript.createobject("wscript.shell")
args=tch.ExpandEnvironmentStrings("%keys%")
msgbox(args)
把这个写入到一个VBS文件中,如test.vbs,功能就是把传入的参数弹窗显示出来,通过DOS的调用方式如下:
set keys=Hello,Baby!
start test.vbs
当然VBS本身是可以自己运行的,不过如果没有参数是没有实际意义的。
知道了VBS的使用,那么写一个简单的替换方法那就是很简单的事情了,如下replace.vbs:
Dim Fso,Temp,File_Temp,File_Open,File_List,Folder_Name
Dim fileName,sourceString,newString
Set Fso = CreateObject("ScriptIng.FileSystemObject")
Set tch=wscript.createobject("wscript.shell")
fileName=tch.ExpandEnvironmentStrings("%fileName%")
sourceString=tch.ExpandEnvironmentStrings("%sourceString%")
newString=tch.ExpandEnvironmentStrings("%newString%")
sourceString=Replace(sourceString,"@","=")
newString=Replace(newString,"@","=")
Set File_Open = Fso.OpenTextFile(fileName,1)
File_Temp = File_Open.readall
File_Open.Close
File_Temp = Replace(File_Temp,sourceString,newString)
Set File_Open = Fso.OpenTextFile(fileName,2)
File_Open.WriteLIne File_Temp
File_Open.Close
通过replaceContent.bat封装:
@echo off
set fileName=%1
set sourceString=%2
set newString=%3
start replace.vbs
调用实列:
cmd /c replaceContent testFile.txt AAA BBB
不过在调用的使用偶尔会报权限不允许,再次运行就不会有问题。
本文出自:冯立彬的博客