提取每个子文件夹中最新名称的 zip 文件

提取每个子文件夹中最新名称的 zip 文件

情况: 我有以下文件夹树:

  • 根\

    • 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选项中删除即可。

相关内容