2014-05-16 13 views
1

是否可以直接從另一個進程的輸出(即通過STDIN的管道)導入註冊表項?Windows腳本:註冊表從Pipe/STDIN導入?

我有一個.reg文件,我想導入一些註冊表項,但只有在做了一些即時修改(填充佔位符值像用戶名等)後。我打算使用How can you find and replace text in a file using the Windows command-line environment?中的方法來進行修改,但現在我需要弄清楚如何將修改後的版本加入到註冊表中。

(gc foo.reg) -creplace '^"UserName"=""$', "`"UserName`"=`"$env:USERNAME`"" | | ... 

我一直在尋找文件REG IMPORT,它需要一個文件名作爲參數。在我有更多經驗的Unix shell腳本中,有很多方法可以解決這個問題。如果我們想象這需要一個文件名的命令​​的Unix版,一些可能的解決辦法是

sed 's/bar/baz/' foo.reg|reg -i 

sed 's/bar/baz/' foo.reg|reg -i - 

sed 's/bar/baz/' foo.reg|reg -i /dev/stdin 

甚至

reg -i <(sed 's/bar/baz/' foo.reg) 

(只有前兩個是完全正常的。)

是否有與Windows相當的功能?

請注意,如果這有所幫助,我可以使用CMD或PowerShell風格的腳本解決方案。

+0

幾個備選方案:我相當肯定,你可以直接從PowerShell中修改註冊表;或者你可以使用'reg add'。 –

回答

2

reg import需要一個文件名,而不是其幫助中的stdin AFAICT。所以,我會讀原來的.reg文件,並修改內容,是保存到一個新文件,並導入新的文件:

(Get-Content foo.reg) -replace '^("UserName"\s*=\s*")"$', "`$1$env:UserName`"" > modfoo.reg 
reg import modfoo.reg 
+0

顯然這是最好的。謝謝! –