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

PowerShell批量删除cp.exe/cp.dll时如何排除指定文件夹

原脚本失效的核心原因
  • -Include 传参格式错误:你把两个文件名写在了同一个字符串里"cp.exe, cp.dll",PowerShell会把它当成一个完整文件名去匹配,自然找不到任何cp.exe或cp.dll。多个匹配规则要拆成独立的数组元素,也就是写成"cp.exe","cp.dll"。
  • -Exclude 用法错误:这个参数默认只匹配文件/文件夹的名称,不支持匹配完整路径,你传入两个完整的目录路径根本不会触发排除逻辑;而且第二个排除路径末尾多了个多余空格,就算匹配名称也对不上。
  • 没有限定查找类型:递归查找时如果存在叫cp.exe或cp.dll的文件夹,会被一并匹配删除,存在误删风险。
修正后可直接使用的脚本
$SourceDirectory = "e:\cache\Agent03\2\s"
# 定义需要保留cp文件的目标目录
$keepPaths = @(
    (Resolve-Path "e:\cache\Agent03\2\s\PS.Manager.Service").Path.ToLower(),
    (Resolve-Path "e:\cache\Agent03\2\s\PS.A.Service").Path.ToLower()
)

Get-ChildItem -Path $SourceDirectory -File -Recurse -Force -Include "cp.exe","cp.dll" | Where-Object {
    $currentDir = $_.DirectoryName.ToLower()
    $needKeep = $false
    foreach ($keepDir in $keepPaths) {
        # 匹配保留目录本身及其所有子目录下的文件,不需要保留子目录文件的话删掉-or后面的判断即可
        if ($currentDir -eq $keepDir -or $currentDir.StartsWith($keepDir + [IO.Path]::DirectorySeparatorChar)) {
            $needKeep = $true
            break
        }
    }
    -not $needKeep
} | Remove-Item -Force -WhatIf

首次运行请保留-WhatIf参数,此时PowerShell只会输出所有待删除的文件路径,不会实际执行删除。确认待删列表完全符合预期后,移除-WhatIf参数再运行即可完成清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:27:17