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
相关产品推荐
相关产品推荐

