You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 5.1脚本:如何保留指定扩展名文件删除其余文件?

PowerShell 5.1 删除文件保留指定扩展名的问题解决

问题根源

你的脚本参数[string[]]$exceptions声明为字符串数组,但调用时传入的"*.zip, *.log"是单个字符串,PowerShell会将其作为数组的唯一元素。-Exclude参数需要的是多个独立的通配符字符串,而非包含逗号的单个字符串,导致匹配逻辑失效,出现全删或全保留的问题。

解决方案

方案1:修改调用方式,正确传递数组参数

无需修改脚本,调用时直接将多个例外项分开传递,PowerShell会自动识别为数组:

powershell -ExecutionPolicy Unrestricted -File "C:\scripts\deletefiles_custom.ps1" "C:\Test\" -exceptions "*.zip" "*.log"

如果例外项不含空格,也可以省略引号:

powershell -ExecutionPolicy Unrestricted -File "C:\scripts\deletefiles_custom.ps1" "C:\Test\" -exceptions *.zip *.log

方案2:修改脚本,支持逗号分隔的输入

若你习惯用逗号分隔的字符串传入例外项,可修改脚本将输入字符串拆分为数组:

param(
    [string]$folder,
    [string]$exceptions
)

# 拆分逗号分隔的字符串,去除每个元素的空格
$excludeList = $exceptions -split ',' | ForEach-Object { $_.Trim() }

# 仅删除文件(不删除子文件夹),递归处理
Get-ChildItem -Path $folder -File -Recurse -Exclude $excludeList | Remove-Item -Force

调用方式保持你原来的写法即可:

powershell -ExecutionPolicy Unrestricted -File "C:\scripts\deletefiles_custom.ps1" "C:\Test\" -exceptions "*.zip, *.log"

额外注意事项

原脚本中Remove-Item "$folder\*" -Recurse -Force会递归删除所有子文件夹及文件(除例外文件),如果你的需求是仅删除文件、保留子文件夹,建议使用Get-ChildItem -File先筛选文件再删除,如方案2中的写法。

内容的提问来源于stack exchange,提问作者Hobbes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:25:09