提取各子文件夹中最新版本命名的Zip文件技术需求
没问题!既然所有文件的时间戳都一致,那咱们只能靠文件名里的修订号来判断哪个是最新版本。下面给你几个不同平台的实用方案,挑你顺手的来:
方案1:Windows 平台用 PowerShell 脚本
这个脚本会自动遍历每个子文件夹,提取文件名里的修订号,找出最大的那个版本,还能把它复制到指定的目标目录(你也可以改成移动或者其他操作):
# 替换成你的根文件夹路径 $rootPath = "C:\Your\Root\Folder" # 可选:替换成你想存放最新版本的目标路径 $targetPath = "C:\Your\Target\Folder" New-Item -ItemType Directory -Path $targetPath -Force | Out-Null # 遍历所有子文件夹 Get-ChildItem -Path $rootPath -Directory | ForEach-Object { $currentFolder = $_ # 筛选符合格式的zip文件,提取修订号 $zipFiles = Get-ChildItem -Path $currentFolder.FullName -Filter "*.zip" | Where-Object { $_.Name -match '^doc\d+-r(\d+)\.zip$' } if (-not $zipFiles) { Write-Warning "文件夹 $($currentFolder.Name) 里没找到符合格式的zip文件" return } # 按修订号从大到小排序,取第一个就是最新版 $latestFile = $zipFiles | Sort-Object { [int]$matches[1] } -Descending | Select-Object -First 1 Write-Host "找到 $($currentFolder.Name) 的最新版本:$($latestFile.Name)" # 复制到目标目录,想移动的话把Copy-Item改成Move-Item Copy-Item -Path $latestFile.FullName -Destination $targetPath -Force }
使用提示:
- 把脚本里的路径换成你实际的文件夹路径
- 先注释掉最后一行的
Copy-Item命令,跑一遍看看输出的文件是不是你要的,确认没问题再执行复制操作
方案2:Linux/macOS 平台用 Bash 脚本
适合类Unix系统的用户,逻辑和上面类似:
#!/bin/bash # 替换成你的根文件夹路径 ROOT_DIR="/your/root/folder" # 可选:替换成目标路径 TARGET_DIR="/your/target/folder" mkdir -p "$TARGET_DIR" # 遍历每个子文件夹 for folder in "$ROOT_DIR"/*/; do cd "$folder" || continue folder_name=$(basename "$folder") # 筛选符合格式的zip,按修订号排序后取最后一个(最大的) latest_zip=$(ls *.zip | grep -E '^doc[0-9]+-r[0-9]+\.zip$' | sort -t 'r' -k2 -n | tail -n1) if [ -z "$latest_zip" ]; then echo "警告:文件夹 $folder_name 里没找到符合格式的zip文件" continue fi echo "找到 $folder_name 的最新版本:$latest_zip" # 复制到目标目录,移动的话把cp改成mv cp "$latest_zip" "$TARGET_DIR/" done
使用提示:
- 给脚本加执行权限:
chmod +x extract_latest.sh - 同样建议先注释复制命令,验证结果后再执行
方案3:跨平台用 Python 脚本
如果你熟悉Python,这个脚本在Windows、Linux、macOS上都能跑:
import os import re from shutil import copyfile # 替换成你的根文件夹路径(Windows用双反斜杠:"C:\\Your\\Root\\Folder") root_dir = "/your/root/folder" # 可选:替换成目标路径 target_dir = "/your/target/folder" os.makedirs(target_dir, exist_ok=True) # 遍历所有子文件夹 for folder_name in os.listdir(root_dir): folder_path = os.path.join(root_dir, folder_name) if not os.path.isdir(folder_path): continue zip_info = [] for filename in os.listdir(folder_path): if filename.endswith(".zip"): # 匹配文件名,提取修订号 match_result = re.match(r'^doc\d+-r(\d+)\.zip$', filename) if match_result: rev_number = int(match_result.group(1)) zip_info.append((rev_number, filename)) if not zip_info: print(f"警告:文件夹 {folder_name} 里没找到符合格式的zip文件") continue # 按修订号降序排序,取第一个 zip_info.sort(reverse=True, key=lambda x: x[0]) latest_rev, latest_filename = zip_info[0] latest_file_path = os.path.join(folder_path, latest_filename) print(f"找到 {folder_name} 的最新版本:{latest_filename}") # 复制到目标目录,移动的话用shutil.move copyfile(latest_file_path, os.path.join(target_dir, latest_filename))
通用注意事项:
- 如果你的文件名格式有变化(比如
doc后面是字母,或者修订号的分隔符不是r),需要调整脚本里的正则表达式或匹配规则 - 测试时优先验证结果,避免误操作覆盖文件
内容的提问来源于stack exchange,提问作者nonKreon
相关产品推荐
相关产品推荐

