我正在使用以下命令:
get-content C:\somepath\Setup.csproj |
select-string -pattern '<None Include="packages.config" />' -notmatch |
Out-File -filepath C:\somepath\Setup.csproj -force
这个想法是删除Setup.csproj中包含文本的任何行<None Include="packages.config" />
.
但是,当我运行上述命令时,我的 Setup.csproj 文件被清空(它从有一堆文本变为没有测试)。
但是,如果我更改命令以输出到新文件 Setup2.csproj,则会创建新文件并包含我想要的内容:
get-content C:\somepath\Setup.csproj |
select-string -pattern '<None Include="packages.config" />' -notmatch |
Out-File -filepath C:\somepath\Setup2.csproj -force
这工作正常,我想我可以删除原来的并将Setup2.csproj重命名为Setup.csproj,但如果它可以一步完成,我会更喜欢它。
有没有办法使用上面的 get-content 和 select-string 方法,然后在同一个文件上调用 Out-File ?
(注意,我从这里得到了上面的例子question.)
管道传输单个项目,而不是等待累积前面命令的整个输出,因此管道在创建时就在begin { }每个部分的块。在您的情况下,输出文件流是在实际处理开始之前创建的,从而覆盖输入。
将命令括在括号中:
(Get-Content C:\somepath\Setup.csproj) | Select-String ......
它强制在管道启动之前对所包含的命令进行完整评估,在这种情况下,整个文件内容作为字符串数组获取,然后将该数组输入到管道中。
它与存储在临时变量中基本相同:
$lines = Get-Content C:\somepath\Setup.csproj
$lines | Select-String ......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)