使用C#程序FNR查找和替换属性,找不到文件

时间:2012-07-12 12:40:10

标签: regex cmd expression

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

任何人都知道我做错了什么? 提前谢谢。

0 个答案:

没有答案