重命名档案中的多个文件

Posted

技术标签:

【中文标题】重命名档案中的多个文件【英文标题】:Renaming multiple files in archives 【发布时间】:2016-03-16 11:31:11 【问题描述】:

这是我需要解决的重命名问题: 有几百个 .zip 存档文件,其中至少包含几个文件。 档案中的文件是部分,命名如下:

Data_Customer1_20160101_part1.txt Data_Customer1_20160101_part2.txt Data_Customer1_20160101_partN.txt

我需要使用 CMD、PowerShell 或 7zip 将 Customer1 部分更改为 Customer2。 方法提取 - 重命名 - 存档是不可接受的,因为有几百 GB 的数据,所以它会很慢。

是否有任何可能的解决方案来重命名档案中的文件而不提取它们?

【问题讨论】:

快速搜索似乎表明 zip 存档不支持此操作。充其量您需要流式传输到一个新的 zip 文件。 【参考方案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。

【讨论】:

以上是关于重命名档案中的多个文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 重命名目录中的多个文件

重命名文件夹中的多个文件,添加前缀 (Windows)

如何使用 mv 命令重命名 unix 中的多个文件?

在Python中重命名目录中的多个文件[重复]

用cmd和批处理中的数字序列重命名多个文件

重命名cmd中的多个文件