![提取每个子文件夹中最新名称的 zip 文件](https://linux22.com/image/1554242/%E6%8F%90%E5%8F%96%E6%AF%8F%E4%B8%AA%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%9C%80%E6%96%B0%E5%90%8D%E7%A7%B0%E7%9A%84%20zip%20%E6%96%87%E4%BB%B6.png)
情况: 我有以下文件夹树:
根\
doc1\
- doc1-r000.zip
- doc1-r010.zip
- ...
- doc1-r051.zip
- doc3\
- doc3-r000.zip
- doc3-r001.zip
- ...
- doc3-r012.zip
- ...
文档N\
- ...
- docN-rM.zip
每个子文件夹包含文档的多个修订版本,这些修订版本位于单独的 zip 文件中。文件夹名称和修订版本号都是不连续的。几乎所有文档的修订版本号都不同。这些是从远程 FTP 服务器克隆的,因此所有文档都具有相同的时间戳,并且日期信息已消失。
目标:最终目标是仅将每个文档的最新修订版提取到根目录。
工具:现成的工具有 Windows 7、PowerShell 2 和 7-Zip,可以安装附加工具或更新。
答案1
在带有 7-Zip 的 PowerShell 中:
$root = "C:\adjust\path"
Get-ChildItem $root -Directory -Recurse -Include 'doc*' | ForEach-Object -Process {
$n = 0
$dir_name = ($_.FullName) + '\' + ($_.BaseName)
while (Test-Path "$dir_name-r000.zip") {
$num = "{0:d3}" -f $n
$test = "$dir_name-r$num.zip"
if (Test-Path $test) {
$file_name = $test
$n++
} else {
."C:\Program Files\7-Zip\7zG.exe" e "$file_name" -o"$root\$_.BaseName"
break
}
}
}
"Done!`n"
Pause
这将从每个包含的文件夹中提取编号最高的档案并将其保存doc
到 中的新子文件夹中$root
。如果您不需要子文件夹,只需\$_.BaseName
从-o
选项中删除即可。