Windows脚本:从Pipe / STDIN导入注册表?

时间:2014-05-16 19:13:17

标签: windows powershell cmd registry 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脚本中,我有更多的经验,有很多方法可以解决这个问题。如果我们想象一个需要文件名的命令reg -i的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风格的脚本编写的解决方案,我很好,如果这有所不同。

1 个答案:

答案 0 :(得分:2)

reg import需要一个文件名而不是stdin AFAICT。所以我会阅读原始的.reg文件并修改内容,将其保存到新文件并导入该新文件:

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