我有一个主虚拟机,上面有几个网站。当我部署它的副本时,设置是标准值,我经常需要更改它们以适应不同的数据库。为此,我想使用一个小的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文件相同的参数以及在同一文件夹+子文件夹中),它会完美地找到文件。
任何人都知道我做错了什么? 提前谢谢。