如何调整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
相关产品推荐
相关产品推荐

