是否可以直接从另一个进程的输出(即通过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风格的脚本编写的解决方案,我很好,如果这有所不同。
答案 0 :(得分:2)
reg import
需要一个文件名而不是stdin AFAICT。所以我会阅读原始的.reg文件并修改内容,将其保存到新文件并导入该新文件:
(Get-Content foo.reg) -replace '^("UserName"\s*=\s*")"$', "`$1$env:UserName`"" > modfoo.reg
reg import modfoo.reg