Eu tenho um diretório com várias subpastas e cada subpasta contém um arquivo cbz.
- Extraia cada arquivo .cbz.
- Se a extração criar uma subpasta, mova seu conteúdo para a pasta do arquivo .cbz.
- Exclua o .cbz original e a subpasta extraída.
Como posso fazer isso no Windows Server 2022? O chatgpt me deu um script do PowerShell quebrado. Ele fecha instantaneamente quando eu o executo.
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe" # Change this if 7z.exe is not in your PATH
Get-ChildItem -Recurse -Filter *.cbz | ForEach-Object {
$cbzFile = $_.FullName
$baseFolder = $_.DirectoryName
$tempFolder = Join-Path $baseFolder ([System.IO.Path]::GetFileNameWithoutExtension($_.Name))
# Extract to a subfolder
& $sevenZipPath x $cbzFile "-o$tempFolder" -y
# Move everything up one level
Get-ChildItem -Path $tempFolder -Recurse | ForEach-Object {
$targetPath = Join-Path $baseFolder $_.Name
if (-not (Test-Path $targetPath)) {
Move-Item $_.FullName -Destination $targetPath
} else {
Write-Host "Skipping '$($_.Name)' — already exists in $baseFolder"
}
}
# Clean up
Remove-Item $cbzFile -Force
Remove-Item $tempFolder -Recurse -Force
}
Então, o que eu lembro é que ao extrair do 7zip os nomes dos caminhos tinham problemas com espaços
Tente isto. Você também pode usar o comando "O que você quer saber" do Write-Host para tentar descobrir onde está o problema.
Provavelmente é o - na linha 19. Ele aparece quando colo em um arquivo como — e está causando um problema.
Alterar linha 19 para:
Depois que fiz isso com seu script, funcionou bem.
A resposta a seguir parte da premissa de que se trata de arquivos CBZ "padrão". Portanto, todas as imagens (e quaisquer arquivos de suporte) estão no nível interno de "pasta superior" e não há subpastas aninhadas com os conteúdos necessários. Se forem formatos personalizados, uma amostra real seria necessária.
Para aqueles que possuem o comando TAR nativo, que a Microsoft adicionou ao Windows 10+, e algumas versões/atualizações do servidor, o método de descompactação nativo mais rápido é um script de linha de comando único. No entanto, por conveniência, vou dividi-lo em partes.
Primeiro verifique em qualquer prompt do console de comando se:
Responde algo como:
bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp
Se sim, então escreva um TARgeted unCBZip.cmd como este: NOTA para teste tem dir e del /Prompt
Assim que estiver satisfeito com o funcionamento, remova isso e
dir &
remova também o/P
depoisdel