1

我有一个主虚拟机,上面托管了一些网站。当我部署它的副本时,这些设置是标准值,我经常需要更改它们以适应不同的数据库。为此,我想使用一个小的 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"

我可以看到前两个通过,如果我检查它应该接触的文件,则值已正确更改。我只是不明白为什么更改端口不起作用,并告诉我它找不到指定的文件。一,它不指定任何单个文件,二,它查找与前两个相同的文件。

此外,如果我尝试在 FNR 中运行正则表达式(查找部分,具有与仅 web.config 文件相同的参数并且在相同的文件夹+子文件夹中),它会完美地找到文件。

有人知道我做错了什么吗?提前致谢。

4

0 回答 0