使用通配符和反斜杠进行Powershell字符串搜索

时间:2014-07-22 17:15:50

标签: powershell search wildcard

在文件中,我有以下字符串,我需要多次搜索:

e:\\installroot\\Development2_14.07.21.000\\

字符串的第一部分应始终保持不变:"e:\\installroot\\"

但字符串的第二部分会改变(永远不会相同),我还需要搜索此字符串并将其替换为新值:"Development2_14.07.21.000"

以下是我尝试更新的文件(reg文件)的示例:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\CompanyName\Services]
"Proc"="w:\\installroot\\Development2_14.07.21.000\\debug\\job.dll,JobServiceThread,interval;30;w:\\installroot\\Development2_14.07.21.000\\debug\\proc.exe deltasets=TEMP"
"Order"="W:\\installroot\\Development2_14.07.18.000\\debug\\order.dll,OrderThread,"
"GBatch"="NULL,ServiceThread,daily;01:10;W:\\installroot\\Development2_14.07.18.000\\debug\\file.exe"

我不确定通配符或正则表达式搜索/替换是否在这里效果最好,因此可以在这里使用一些输入来确定最佳方法。请注意双反斜杠。

此外,我不想更新reg文件并进行reg导入,而是希望直接更新注册表,所以希望可以在PowerShell中完成。

另外注意:我一直都不能使用术语" Development2 _"在我的搜索方案中。有时它可能是"开发_"或"测试_"或者"发布_"或者该路径中的任何内容。只是需要考虑的事情。

2 个答案:

答案 0 :(得分:1)

为什么Select-String不能按您的要求运行?

在:

(cat .\temp.txt | Select-String -Pattern "installroot") | % { $_.ToString() | % { $_ -replace $_.Substring(17), "Some new content" } }

输出:

e:\\installroot\\Some new content\

答案 1 :(得分:1)

在此处插入通用查找和替换脚本:

(gc C:\temp.txt) | % { 
    if($_ -like "*installroot*") {
        $_ -replace 'installroot\\.+?\\',"installroot\Development_14.07.21.111\"
    }
    else {
        $_
    }
 }| set-content C:\Temp.txt

是的,你是对的,直接使用powershell对注册表进行这些更改会更容易。你应该尝试一下,让我们知道它是怎么回事......