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

如何调整PowerShell脚本以复制目录及子目录下的所有PDF文件

PowerShell脚本修改方案

核心修改仅需调整Get-ChildItem命令的参数即可实现遍历所有子目录PDF的需求:

  • 新增-Recurse参数开启递归检索,会自动扫描源目录下所有层级的子文件夹
  • 新增-File参数确保只匹配文件对象,过滤掉名称带.pdf后缀的文件夹,避免逻辑异常

修改后的完整脚本如下:

# 输入输出根目录配置
$inPath = 'Z:\PDF Archive\2010\TEST'
$outPathRoot = 'Z:\PDF Archive'

# 输入文件名的最大数字长度
$maxDigits = 7

# 新增-Recurse和-File参数实现子目录递归检索PDF文件
Get-ChildItem -LiteralPath $inPath -Filter *.pdf -Recurse -File | ForEach-Object {

  # 给文件名的数字部分补前导0,确保长度为7位
  $paddedNum = $_.BaseName.PadLeft($maxDigits, '0')

  # 构造目标子目录名称,取前2位、前3位数字分别拼接0和9作为区间标识
  $subDirs = 
    foreach ($leadingDigits in $paddedNum.Substring(0, 2), $paddedNum.Substring(0, 3)) {
      ($leadingDigits + '0' * ($maxDigits - $leadingDigits.Length)),
      ($leadingDigits + '9' * ($maxDigits - $leadingDigits.Length)) -join '-'
    }

  # 自动创建目标目录,已存在的目录不会报错
  $targetDir = New-Item -Type Directory -Force ($outPathRoot + '\' + ($subDirs -join '\'))

  # 复制文件到目标目录,如果需要避免同名覆盖可以在末尾加 -WhatIf 先试运行确认
  $_ | Copy-Item -Destination $targetDir.FullName
}

补充说明:如果不同子目录下存在同名PDF文件,直接执行会默认覆盖目标目录下的重名文件。你可以先在Copy-Item命令末尾加上-WhatIf参数运行脚本,控制台会输出所有待执行的复制操作,确认没有冲突后再移除该参数正式执行即可。


内容的提问来源于stack exchange,提问作者Bryan Bishop Pagenkopf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:48:01