Powershell:您如何在一个管道中读写I / O?
发布时间:2020-12-14 04:55:33 所属栏目:百科 来源:网络整理
导读:我希望能够键入快速,简单的命令来就地操作文件.例如: # prettify an XML fileformat-xml foo | out-file foo 这不起作用,因为管道设计为“贪婪”.一旦上游cmdlet处理第一行输入,下游cmdlet就会获取对文件的写锁定,这会阻止上游cmdlet读取文件的其余部分. 有
我希望能够键入快速,简单的命令来就地操作文件.例如:
# prettify an XML file format-xml foo | out-file foo 这不起作用,因为管道设计为“贪婪”.一旦上游cmdlet处理第一行输入,下游cmdlet就会获取对文件的写锁定,这会阻止上游cmdlet读取文件的其余部分. 有许多可能的解决方法:写入临时文件,将操作分成多个管道(将中间结果存储在变量中)或类似.但我认为这是一个非常普遍的任务,有人开发了一个快速,易于使用的快捷方式. 我试过这个: function Buffer-Object { [CmdletBinding()] param ( [parameter(Mandatory=$True,ValueFromPipeline=$True)] [psobject] $InputObject ) begin { $buf = new-list psobject } process { $buf.Add($InputObject) } end { $buf } } format-xml foo | buffer-object | out-file foo 在某些情况下它可以正常工作.映射到一个简短的别名并进入像PSCX这样的通用发行版,它对于快速交互式任务来说“足够好”.不幸的是,似乎有些cmdlet(包括out-file)在Begin {}方法而不是Process {}中获取锁,因此它不能解决这个特定的例子. 其他想法? 解决方法
据我记得(现在无法测试),您可以使用命名空间符号将整个文件读入内存:
${c:file1.txt} = ${c:file1.txt} -replace "a" "o" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |