我有以下简单的代码:
remove-item -path $path | where($_ -like "*IE*")
但由于某种原因,由于通配符而导致错误
答案 0 :(得分:0)
上面的脚本有一些错误。我会尽力帮助你。
首先,Remove-Item cmdlet不为where行提供任何输出。你必须先得到它。我要假设因为你想过滤掉与IE不匹配的项目,你将从目录中获取多个文件。如果这只是一个文件,那么您需要做的就是Remove-Item -Path $ Path。如果它是目录,则cmdlet为Get-ChildItem
Get-ChildItem -Path $Path
现在您拥有了$ Path中的所有商品,我们需要对其进行过滤。您可以使用Where-Object执行此操作。像这样......
Get-ChildItem -Path $Path | Where-Object
这是下一个问题的来源。当我认为你想要匹配时,你正在使用。此外,您的$ _将表示整个对象。我们需要匹配对象的属性。它看起来像这样
Get-ChildItem -Path $Path | Where-Object -FilterScript { $_.PROPERTYNAME -match "IE"}
现在我们有了对象,并且我们对它们进行了排序,是时候将它们删除了。我们使用上面的Remove-Item cmdlet执行此操作。请注意,这一次,它是在管道的最后,而不是开始。
Get-ChildItem -Path $Path | Where-Object -FilterScript { $_.PROPERTYNAME -match "IE"} | Remove-Item
如果您不想确认每一个(并且您确定这些是您要删除的项目),请在Remove-Item之后添加-Confirm:$ false。否则,您必须在控制台中确认要删除的每个文件。
我真的希望这有帮助!