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