いくつかの Web サイトがホストされているマスター仮想マシンがあります。これのコピーを展開するとき、設定は標準値であり、異なるデータベースに適合するように設定を変更する必要があることがよくあります。このために、小さな C# プログラムを使用して、正規表現を使用して必要なプロパティを見つけて置き換えることができるようにしたいと考えています。これには、fnr (http://findandreplace.codeplex.com/) を使用します。
findandreplace.bat:
set DATABASE="dbname"
set DBHOST="my.host.name"
set DBPORT="1234"
set ENV="this.env"
ECHO CHANGE DATABASE
"fnr" --cl --dir "D:\Inetpub\wwwroot" --fileMask "web.config" --includeSubDirectories --useRegEx --find "<add key=\"DATABASE\" value=\".*\"\s*>" --replace "<add key=\"DATABASE\" value=\"%DATABASE%\">"
ECHO CHANGE HOST
"fnr" --cl --dir "D:\Inetpub\wwwroot" --fileMask "web.config" --includeSubDirectories --useRegEx --find "<add key=\"HOST\" value=\".*\"\s*>" --replace "<add key=\"HOST\" value=\"%DBHOST%\">"
ECHO CHANGE PORT
"fnr" --cl --dir "D:\Inetpub\wwwroot" --fileMask "web.config" --includeSubDirectories --useRegEx --find "<add key=\"ConnectionString\" value=\"Data Source.*>" --replace "<add key=\"ConnectionString\" value=\"Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = %%3%%)(port = %DBPORT%)) )(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = %%2%%)));User ID=%%0%%;Password=%%1%%;Enlist=false\">"
set /p await= "any key to continue"
Windows コマンド プロンプトでは、最終的に次の出力が得られます。
CHANGE PORT
The system cannot find the file specified.
"any key to continue"
最初の 2 つが通過したことを確認できます。対象となるファイルを確認すると、値が正しく変更されています。ポートの変更が機能しない理由が理解できず、指定されたファイルが見つからないことがわかりました。1 つは単一のファイルを指定しないこと、2 つは最初の 2 つのファイルと同じファイルを検索することです。
また、FNR で正規表現を実行しようとすると (検索部分、web.config ファイルのみと同じパラメーターを使用し、同じフォルダー + サブフォルダー内にある)、ファイルが完全に検索されます。
私が間違っていることについて誰かが考えましたか?前もって感謝します。