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

如何在PowerShell中实现文件名查询及未匹配文件名写入文本功能

完善后的PowerShell脚本:检查PDF文件并处理已存在/未存在的情况

以下是针对需求完善后的脚本,修复了原脚本缺失的判断逻辑,同时优化了执行效率和健壮性:

$pdfDir = "C:\Users\user\Downloads"
$contentFile = "C:\Users\user\Downloads\content.txt"

# 确保记录文件存在,避免后续读取异常
if (-not (Test-Path -Path $contentFile)) {
    New-Item -Path $contentFile -ItemType File | Out-Null
}

# 获取目标文件夹下所有PDF文件(仅文件,排除目录)
$pdfFiles = Get-ChildItem -Path $pdfDir -Filter "*.pdf" -File

# 无PDF文件时直接退出
if ($pdfFiles.Count -eq 0) {
    Write-Host "未找到任何PDF文件"
    Exit
}

# 读取已记录的文件名到集合,提升查询效率
$existingNames = Get-Content -Path $contentFile | Where-Object { $_ -ne "" }

foreach ($file in $pdfFiles) {
    $fileName = $file.Name
    if ($existingNames -contains $fileName) {
        # --- 文件已存在记录时执行的步骤 ---
        Write-Host "已处理文件: $fileName"
        # 示例操作:移动到已归档文件夹
        # Move-Item -Path $file.FullName -Destination "C:\Users\user\Downloads\Archived\"
    }
    else {
        # --- 文件未存在记录时执行的步骤 ---
        Write-Host "处理新文件: $fileName"
        # 示例操作:调用工具处理PDF
        # & "C:\Program Files\PDFTool\pdftool.exe" $file.FullName
        # 将文件名写入记录文件
        Add-Content -Path $contentFile -Value $fileName
    }
}

关键改进说明

  • 路径规范:将文件夹路径与文件筛选分离,使用Get-ChildItem -Filter比直接在路径中写*.pdf更高效、更符合PowerShell最佳实践
  • 健壮性提升:提前检查并创建content.txt,避免因文件不存在导致的读取错误
  • 效率优化:一次性读取所有已记录文件名到集合,避免循环中重复读取文件
  • 逻辑补全:完善了文件名存在性判断的核心逻辑,补充了完整的if/else分支
  • 空值处理:过滤content.txt中的空行,避免无效匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:45:36