2

ここに私が持っている.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 = server 1; DB_name=サーバー 1 上の実際のデータベースなど... 助けていただければ幸いです!

4

2 に答える 2

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>
于 2013-05-09T19:31:50.153 に答える
0

これが私の FindandReplace.cmd スクリプトです。VBScript を使用して、バッチが課す制限を克服します。このように呼び出し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))
于 2013-05-09T18:53:55.673 に答える