2016-03-16 115 views
0

這裏的重命名問題,我需要解決: 有包含在其中至少一些文件幾百.zip存檔文件。 文件檔案中有部分並分別命名爲這樣的:重命名多個文件檔案

Data_Customer1_20160101_part1.txt
Data_Customer1_20160101_part2.txt
Data_Customer1_20160101_partN.txt

我需要使用CMD,PowerShell的或7zip的改變customer1表部分顧客2。 方法提取 - 重命名 - 歸檔是不可接受的,因爲有幾百GB的數據,所以它會很慢。

是否有任何可能的解決方案,以重命名歸檔文件,而無需extrating呢?

+1

快速搜索似乎表明,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的工作。