gpt4 book ai didi

powershell - 获取内容不在括号中-拒绝进程访问

转载 作者:行者123 更新时间:2023-12-02 23:07:45 29 4
gpt4 key购买 nike

使用Get-Content从文件中删除空格时:

$file = "C:\Folder\MyFile001.txt"
Get-Content -Path $file | ? { -not [string]::IsNullOrWhiteSpace($_) } | Set-Content -Path $file

显示错误消息“Set-Content:该进程无法访问文件...,因为它正被另一个进程使用。

解决方法是在 Get-Content中使用括号:
(Get-Content -Path $file) | ...

这是什么原因呢?我想了解括号的区别,以及这是否适用于其他cmdlet。

最佳答案

括号在Powershell中的工作方式与在代数中一样。

的种类。

PowerShell首先在括号中执行该命令,然后尝试将其与要运行的位置进行类型匹配。在这种情况下,您要告诉它完成Get-Content的运行并将缓冲区读入内存,然后再继续执行下一个命令,而不是通过管道流式传输所有内容。

这类似于BaSH的工作方式,在这里您使用类似的命令(假设“service.txt”包含单行写着apache):

Service $(cat /etc/service.txt) Stop
>> Service apache stop

它将在$()中执行命令,并在运行其余命令之前将其作为文本返回。

在PowerShell中,您可以使用括号的类型匹配功能执行整洁的事情,例如使其仅返回单个对象属性:
(Get-ChildItem -filter "*.pdf" -Path .\Projects).FullName 
>> C:\Users\ncf\Projects\Documentation.pdf

关于powershell - 获取内容不在括号中-拒绝进程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56672253/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com