因为我刚接触powershell,所以出现了以下情况。
我有一个路径 d:\folder,其中有很多子文件夹,其中包含子文件夹和文件。在此文件夹结构中,我想删除所有名为“Temp”、“History”、“Thumbnails”的文件夹以及该特定文件夹名称下的所有文件夹和文件。
到目前为止我已经使用了以下代码$path = "d:\folder\" Get-ChildItem $path -Recurse -Force -Directory | Where-Object {$_.Name -eq 'temp'} | % {Remove-Item $_.FullName}
这仅适用于 1 个文件夹。我找不到适用于多个文件夹的方法?使用此代码时,我弹出一个窗口,要求删除该文件夹。有没有办法让此消息保持沉默?
答案1
尝试使用-Include
Get-ChildItem 上的参数,该参数可以接受要“过滤”的名称数组。这样您就不需要该Where-Object
子句了。
此外,不需要ForEach-Object
循环(别名%
),因为 Remove-Item 可以立即对管道结果进行操作:
$path = 'd:\folder'
Get-ChildItem $path -Recurse -Force -Directory -Include 'Temp', 'History', 'Thumbnails' |
Remove-Item -Recurse -Confirm:$false -Force -WhatIf
通过-Recurse
向 Remove-Item 添加开关,当文件夹中有子项目时将不会弹出。
我添加了安全开关-WhatIf
,因此文件夹实际上不会被删除。您只会在控制台中看到会发生。
一旦你对此感到满意,删除-WhatIf
开关即可开始删除