Powershell 删除包含字符串的文件

Powershell 删除包含字符串的文件,powershell,Powershell,如何使用powershell删除目录中包含字符串的所有文件 我试过类似的方法 $list = get-childitem *.milk | select-string -pattern "fRating=2" | Format-Table Path $list | foreach { rm $_.Path } 这对一些文件有效,但并没有删除所有文件。我试过其他各种方法,但都不管用 我可以很容易地获得文件名列表,并且可以创建一个仅使用该路径的数组 $lista = @(); foreach ($

如何使用powershell删除目录中包含字符串的所有文件

我试过类似的方法

$list = get-childitem *.milk | select-string -pattern "fRating=2" | Format-Table Path
$list | foreach { rm $_.Path }
这对一些文件有效,但并没有删除所有文件。我试过其他各种方法,但都不管用

我可以很容易地获得文件名列表,并且可以创建一个仅使用该路径的数组

$lista = @(); foreach ($f in $list) { $lista += $f.Path; }
但似乎无法获得任何命令(
del
rm
、或
删除项
)来执行任何操作。只需立即返回,无需删除文件或给出错误


谢谢

为什么要使用
选择字符串模式“fRating=2”
?是否要选择具有此名称的所有文件? 我认为
格式表路径
不起作用。命令
Get ChildItem
没有名为“Path”的属性。
这是为你剪的吗

$list = get-childitem *.milk | Where-Object -FilterScript {$_.Name -match "fRating=2"}
$list | foreach { rm $_.FullName }

首先,我们可以将您的代码简化为:

Get-ChildItem "*.milk" | Select-String -Pattern "fRating=2" | Select-Object -ExcludeProperty path | Remove-Item -Force -Confirm
缺乏行动和错误可以通过以下两种方式之一解决。
Force
参数,该参数:

允许cmdlet删除无法更改的项, 例如隐藏或只读文件或只读别名或变量

我还建议您以管理员身份运行此脚本。根据这些文件的位置,您可能没有权限。如果不是这样或不起作用,请包括您得到的错误

我猜错误是:

remove-item : Cannot remove item C:\temp\somefile.txt: The process cannot access the file 'C:\temp\somefile.txt'
because it is being used by another process.
更新

在测试中,我也遇到了类似的错误。经研究,似乎Select字符串cmd let保留在文件上,阻止删除该文件。基于我以前从未见过Get ChildItem这样做的假设。这种情况下的解决方案是将第一部分作为子表达式封装在括号中,以便在通过管道之前处理所有文件

(Get-ChildItem | Select-String -Pattern "tes" | Select-Object -ExpandProperty path) | Remove-Item -Force -Confirm 
删除
-如果认为需要,请确认
。它是作为预防措施存在的,这样您就不会在
c:\windows\system32
中打开新的powershell并在其中复制粘贴一个remove-item cmdlet

另一次更新

[
]
是powershell中的通配符搜索,用于转义您使用的某些cmdlet中的通配符搜索。另外,
Select String
可以返回文件中的多个点击,因此我们应该使用
-Unique

(Get-ChildItem *.milk | Select-String -Pattern "fRating=2" | Select-Object -ExpandProperty path -Unique) | ForEach-Object{Remove-Item -Force -LiteralPath $_}

下面的代码获取*.milk类型的所有文件,并将它们放入
$listA
,然后使用该列表获取包含字符串
fRating=[01]
的所有文件,并将它们存储在
$listB
中。删除
$listB
中的文件,然后显示删除的文件数与包含匹配项的文件数(它们应该相等)


不需要把事情复杂化:

1$sourcePath=“\\path\to\the\file\”

2.删除项目“$sourcePath*whatever*”

我尝试了答案,不幸的是,似乎总是出现错误,但是,我设法创建了一个解决方案来完成此操作:

不使用Get;您可以直接使用选择字符串来搜索与特定字符串匹配的文件,是的,这将返回文件名:count:content。。。等等,但是,在内部,这些名称您可以选择或省略,您需要的是“文件名”来执行此操作,将其导入“选择对象”,从输出中选择“文件名”

因此,要选择所有具有“Subject:Webservices restarted”模式的*.MSG文件,您可以执行以下操作:

选择String-Path.*.MSG-Pattern'Subject:WebServices Restarted' -列表|选择对象文件名

此外,要动态删除这些文件,可以使用RM命令插入ForEach语句,如下所示:

选择String-Path.*.MSG-Pattern'Subject:WebServices Restarted' -列表|选择对象文件名| foreach{rm$ux.Filename}

我自己也试过,效果100%


我希望这有帮助

OP正在查找其内容包含行“fRating=2”的文件。
select string
的输出具有路径属性。这也不能解决删除文件的实际问题。如果我这样做
(Get ChildItem*.milk | Select String-Pattern“fRating=2”| Select Object-ExpandProperty path)| Remove Item-Force
我会收到一个错误
Remove Item:指定的通配符模式无效:Flexi-area 51[lotka volterra顶点扭曲上的反应扩散,外星人边缘辉光万花筒。行中的牛奶:1字符:93+…属性路径)|移除物品-力+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[移除物品],WildcardPatternException+FullyQualifiedErrorId:RuntimeException,Microsoft.PowerShell.Commands.RemoveItemCommand
不确定是否与引号或什么有关。我想可能是文件名中的
[
]
导致PowerShell报废?我正在更新我的帖子谢谢。不得不删除Unique(出现错误)但现在似乎已经开始工作了。有没有办法计算出找到了多少文件,有多少文件被实际删除,并在最后报告?(另外,为了获得额外积分,我需要删除所有带有
fRating的文件,唯一文件应该是
select object
not
select string
的一部分。我更新了我的帖子。这并没有回答OP问题,他想删除一个包含特定字符串的文件。
sv -name listA -value (Get-ChildItem *.milk); sv -name listB -value ($listA | Select-String -Pattern "fRating=[01]"); (($listB | Select-Object -ExpandProperty path) | ForEach-Object {Remove-Item -Force -LiteralPath $_}); (sv -name FCount -value ((Get-ChildItem *.milk).Count)); Write-Host -NoNewline Files Deleted ($listA.Count - $FCount)/($listB.Count)`n;