这里是我的.config文件的一部分:
<cs.components>
<clear/>
<cs.component name="Security"/>
<cs.configitems>
<cs.configitem name="sql.server.name" value="some_name" type="String" description=""/>
<cs.configitem name="sql.server.database" value="DB_name" type="String" description=""/>
<cs.configitem name="sql.user" value="user_name" type="String" description=""/>
<cs.configitem name="sql.pass" value="pass" type="String" description=""/>
</cs.components>
所以基本上我想编辑带有相应名称的文件* * some_name =服务器1; DB_name =服务器1上的真实数据库,依此类推...... 任何帮助将不胜感激!
答案 0 :(得分:2)
下面的批处理文件是实现您想要的程序的初步版本。输入和输出文件的名称在程序中是硬编码的,但可以更改为在参数中提供它们或自动处理通配符选择的所有文件。如果文件包含惊叹号,程序将删除空行并失败,但如果需要,可以修复这些限制。
@echo off
setlocal EnableDelayedExpansion
rem Save replacement strings
set i=0
:nextParam
if "%~1" equ "" goto endParams
set /A i+=1
set "replace[!i!]=%~1"
shift
goto nextParam
:endParams
rem Process the file
(for /F "delims=" %%a in (input.txt) do (
set "line=%%a"
for /L %%i in (1,1,%i%) do (
for /F "delims=" %%r in ("!replace[%%i]!") do (
set "line=!line:%%r!"
)
)
echo !line!
)) > output.txt
要使用此程序,请将引号括起来的替换字符串作为参数。例如:
replace.bat "some_name=server 1" "DB_name=A real database on Server 1"
输出:
<cs.components>
<clear/>
<cs.component name="Security"/>
<cs.configitems>
<cs.configitem name="sql.server.name" value="server 1" type="String" description=""/>
<cs.configitem name="sql.server.database" value="A real database on Server 1" type="String" description=""/>
<cs.configitem name="sql.user" value="user_name" type="String" description=""/>
<cs.configitem name="sql.pass" value="pass" type="String" description=""/>
</cs.components>
答案 1 :(得分:0)
这是我的FindandReplace.cmd脚本。它使用VBScript克服Batch强加的限制。像这样称呼FindAndReplace <searchstring> <replacestring> <filename or Wildcard>
它区分大小写。制作批处理文件后,您可以这样调用它:
FindAndReplace some_name some_new_name *.config
FindAndReplace DB_name DB_new_name *.config
::FindAndReplace.cmd
@echo off
for /f "tokens=*" %%a in ('dir %~3 /b /a-d /on') do (
pushd %~dp0
if not exist _.vbs goto :MakeReplace
<%%a cscript /nologo _.vbs "%~1" "%~2" "%~3">new.txt
move /Y new.txt %%~nxa > NUL
popd
)
del _.vbs
goto :eof
:MakeReplace
>_.vbs echo Wscript.StdOut.Write Replace(WScript.StdIn.ReadAll,Wscript.arguments(0), Wscript.arguments(1))