重命名存档中的多个文件
Renaming multiple files in archives
这是我需要解决的重命名问题:
有几百个 .zip 存档文件,其中至少包含几个文件。
档案中的文件是零件,命名如下:
Data_Customer1_20160101_part1.txt
Data_Customer1_20160101_part2.txt
Data_Customer1_20160101_partN.txt
我需要使用 CMD、PowerShell 或 7zip 将 Customer1 部分更改为 Customer2。
方法提取 - 重命名 - 存档是不可接受的,因为有几百 GB 的数据,所以它会很慢。
是否有任何可能的解决方案来重命名存档中的文件而不提取它们?
这可以使用 PowerShell
和最新的 7-Zip 15.14 exe 来完成。 Download 并安装 7-Zip,一旦安装 7z.exe 应该在以下位置 C:\Program Files-Zipz.exe
。
$ArchivesFolder = "T:\Your Archives\"
zipExe = "C:\Program Files-Zipz.exe"
$search = "Customer1"
$replace = "Customer2"
gci $ArchivesFolder -Filter "*.zip" | % {
$archive = $_.FullName
Write-Host $archive -ForegroundColor DarkYellow
& zipExe l $archive `
| select -Skip 11 `
| %{IF($_.Length -gt 52 ){$_.substring(53)}} `
| ?{$_ -notmatch "\d* files, \d* folders|------------------------" -and $_ -match $search } `
| %{
write-host "Renaming:[$_] To:[$($_ -replace $search,$replace)]" -ForegroundColor cyan
& zipExe rn $archive "$_" "$($_ -replace $search,$replace)" | Out-Null # Comment out
}
}
上面的 PowerShell
将通过 .zip 文件的给定文件夹($ArchivesFolder)递归。它将在每个 zip 文件和 replace/rename 文件名中查找与给定搜索变量 ($search
) 和给定替换值 ($replace).
匹配的任何部分
如果您想查看脚本在 运行 之前执行的操作,请用 #
注释掉旁边带有 (# Comment out
) 的行。这将阻止任何文件被重命名。
该脚本正在使用 7z.exe 的 rn
参数重命名存档内文件的语法是
7z rn <archive_name> <src_file_1> <dest_file_1> [ <src_file_2> <dest_file_2> ... ]
注意 这仅适用于 7z.exe.
的 15.14 版本
这是我需要解决的重命名问题: 有几百个 .zip 存档文件,其中至少包含几个文件。 档案中的文件是零件,命名如下:
Data_Customer1_20160101_part1.txt
Data_Customer1_20160101_part2.txt
Data_Customer1_20160101_partN.txt
我需要使用 CMD、PowerShell 或 7zip 将 Customer1 部分更改为 Customer2。 方法提取 - 重命名 - 存档是不可接受的,因为有几百 GB 的数据,所以它会很慢。
是否有任何可能的解决方案来重命名存档中的文件而不提取它们?
这可以使用 PowerShell
和最新的 7-Zip 15.14 exe 来完成。 Download 并安装 7-Zip,一旦安装 7z.exe 应该在以下位置 C:\Program Files-Zipz.exe
。
$ArchivesFolder = "T:\Your Archives\"
zipExe = "C:\Program Files-Zipz.exe"
$search = "Customer1"
$replace = "Customer2"
gci $ArchivesFolder -Filter "*.zip" | % {
$archive = $_.FullName
Write-Host $archive -ForegroundColor DarkYellow
& zipExe l $archive `
| select -Skip 11 `
| %{IF($_.Length -gt 52 ){$_.substring(53)}} `
| ?{$_ -notmatch "\d* files, \d* folders|------------------------" -and $_ -match $search } `
| %{
write-host "Renaming:[$_] To:[$($_ -replace $search,$replace)]" -ForegroundColor cyan
& zipExe rn $archive "$_" "$($_ -replace $search,$replace)" | Out-Null # Comment out
}
}
上面的 PowerShell
将通过 .zip 文件的给定文件夹($ArchivesFolder)递归。它将在每个 zip 文件和 replace/rename 文件名中查找与给定搜索变量 ($search
) 和给定替换值 ($replace).
如果您想查看脚本在 运行 之前执行的操作,请用 #
注释掉旁边带有 (# Comment out
) 的行。这将阻止任何文件被重命名。
该脚本正在使用 7z.exe 的 rn
参数重命名存档内文件的语法是
7z rn <archive_name> <src_file_1> <dest_file_1> [ <src_file_2> <dest_file_2> ... ]
注意 这仅适用于 7z.exe.
的 15.14 版本