DOS下實現內容替換

2021-06-06 14:01:18 字數 1908 閱讀 8025

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
不過在呼叫的使用偶爾會報許可權不允許,再次執行就不會有問題。

Linux下VIM文字內容替換

vi vim 中可以使用 s 命令來替換字串。該命令有很多種不同細節使用方法,可以實現複雜的功能,記錄幾種在此,方便以後查詢。可以使用 作為分隔符,此時中間出現的 不會作為分隔符 s vivian sky 替換當前行第乙個 vivian 為 sky s oradata apras user01 ap...

Java實現文字內容替換(四)

本次用隨機檔案實現文字內容替換,不過有苛刻的要求,要求原字串和替換字串位元組長度相等。在檔案找到原字串開始位置,然後seek定位,開始講替換後字串寫入即可實現替換文字特定內容.public class alterstringinfile lastpoint raf.getfilepointer ra...

Linux 下批量替換檔案內容

通常在網路上可以找到的方法是 sed i s oldstring newstring g grep oldstring rl path 但是其中有太多的限制,比如 無法篩選哪些檔案是你不想要的,你只能替換所有grep出來的檔案,我在專案裡遇到的一種情況是,這樣的替換會同時影響到.svn檔案,導致up...