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

PowerShell需求:删除目录及子目录中无对应PDF的孤立TXT文件

问题描述

我用一款应用将扫描文档转换为PDF格式,该应用会持续监控文件夹及子文件夹。我将其设置为生成同名的TXT文件(而非把PDF转为可搜索PDF),以便在其他PowerShell脚本中借助这些TXT文件的内容,基于PDF内容对文件进行命名和操作。但当PDF文件名修改时,应用会基于新名称生成新的TXT文件,旧的TXT文件则会保留。

我需要搜索指定目录及子目录,找出无对应PDF文件的TXT文件并将其删除。

我尝试过的代码

代码变体1

Get-ChildItem -Recurse -File |
Group-Object -Property Directory,BaseName |
Where-Object Count -gt 0 |
Select-Object Name

代码变体2

Push-Location $source

# 递归不生效,只检查当前文件夹的文件
Get-childitem -recurse *.txt | ForEach {     
    if (!(test-path "$($_.BaseName).pdf")){           
      "$($_.BaseName).pdf missing"
    }
  } 

Pop-Location

解决方案

这段代码能正确递归扫描所有子目录,找出无对应PDF的TXT文件并删除(测试阶段可先查看输出,确认无误后再执行删除):

# 替换为你要扫描的根目录路径
$source = "D:\你的目标文件夹"

Get-ChildItem -Path $source -Recurse -Filter *.txt -File | ForEach-Object {
    # 拼接对应PDF文件的完整路径(和TXT同目录)
    $pdfPath = Join-Path -Path $_.DirectoryName -ChildPath "$($_.BaseName).pdf"
    if (-not (Test-Path -Path $pdfPath -PathType Leaf)) {
        # 先输出要删除的文件路径,确认无误后再启用删除命令
        Write-Host "待删除的无对应PDF的TXT文件:$($_.FullName)"
        # 取消注释下面一行以执行删除
        # Remove-Item -Path $_.FullName -Force
    }
}

关键说明

  • 使用Join-Path拼接路径,确保检查的是TXT文件所在同一子目录下的PDF,解决了原代码只检查当前工作目录的问题
  • -PathType Leaf参数确保Test-Path仅验证文件(而非目录)
  • 建议先运行带Write-Host的版本确认要删除的文件列表,再启用Remove-Item执行删除操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:44:57