/ / Renomeando múltiplos arquivos em arquivos - powershell, cmd, 7zip

Renomeando múltiplos arquivos em arquivos - powershell, cmd, 7zip

Aqui está o problema de renomeação que preciso resolver: Existem algumas centenas de arquivos .zip que contêm pelo menos alguns arquivos neles. Arquivos em arquivos são partes e são nomeados assim:

Data_Customer1_20160101_part1.txt
Data_Customer1_20160101_part2.txt
Data_Customer1_20160101_partN.txt

Preciso alterar a parte Customer1 para Customer2 usando CMD, PowerShell ou 7zip. Extrair abordagem - renomear - arquivar não é aceitável, pois há algumas centenas de GB de dados, por isso seria muito lento.

Existe alguma solução possível para renomear arquivos em arquivos sem extratá-los?

Respostas:

1 para resposta № 1

Isso pode ser feito usando PowerShell e o mais recente 7-Zip 15.14 exe. Baixar e instalar o 7-Zip, uma vez instalado 7z.exe deve estar no seguinte local C:Program Files7-Zip7z.exe.

$ArchivesFolder = "T:Your Archives"
$7zipExe = "C:Program Files7-Zip7z.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
}
}

O de cima PowerShell irá recorrer através de uma pasta de doação ($ ArchivesFolder) de arquivos .zip. Ele irá olhar dentro de cada arquivo zip e substituir / renomear qualquer parte do nome do arquivo que corresponda à variável de busca ($search) com o valor de reposição dado ($ replace).

Se você quiser ver o que o script faz antes de executá-lo, comente a linha que tem (# Comment out) ao lado dele com um #. Isso impedirá que qualquer arquivo seja renomeado.

O script está usando o rn parâmetro de 7z.exe A sintaxe para renomear arquivos dentro de arquivos é

7z rn <archive_name> <src_file_1> <dest_file_1> [ <src_file_2> <dest_file_2> ... ]

Nota Isso só funcionará com a versão 15.14 do 7z.exe.