arquivo zip (com espaços no nome dos arquivos) para descompactar e renomear arquivos e zip voltar

1

Estou tentando renomear o conteúdo de um arquivo zip para corresponder ao nome do arquivo zip com um arquivo em lotes.

Isso é exatamente o que estou tentando fazer: link

funciona, mas apenas se os arquivos zip não tiverem espaço no nome do arquivo. Caso contrário, ele cria um monte de pastas vazias onde ocorre um espaço no nome do arquivo zip.

A resposta de Phil V funciona bem, mas acho que só preciso de um pouco de refinamento:

:: # Core Logic
:: # Looping through all the zips
for %%c in (*.zip) do (
    :: # Make a temporary folder with the same name as zip to house the zip content
    if not exist %%~nc md %%~nc
    :: # Extracting zip content into the temporary folder
    7z e -o%%~nc %%c
    if exist %%~nc (
        :: # Jump into the temporary folder
        pushd %%~nc
        if exist *.* (
            :: Loop through all the files found in the temporary folder and prefix it with the zip's name
            for %%i in (*.*) do (
                ren %%i %%~nc.%%i
            )
            :: # Zip all the files with the zip prefix with orginal zip name but with a number 2 (abc2.zip)
            if exist %%~nc.* (
                7z a -tzip %%~nc2 %%~nc.*
            )
            :: # Move the new zip back out of the tempory folder
            if exist %%~nc2.zip move %%~nc2.zip ..
        )
        :: # Jump out of the temporary folder
        popd
        :: # Showing you the directory listing
        dir
        :: # Showing you the content inside the new zip
        7z l %%~nc2.zip
        :: # Remove the temporary folder (Clean up)
        rd /s/q %%~nc
    )
)

Atualização: OK, funcionou com a ajuda do webmarc (veja a solução abaixo).

Foram necessárias algumas tentativas e erros, mas acabei descobrindo onde as cotações são necessárias para que funcione da maneira que eu preciso. Assim como o webmarc, "coloque aspas em torno de quaisquer outros argumentos em seu programa que possam ter espaços incorporados".

    
por DigablePlanets 10.09.2014 / 17:03

1 resposta

2

Não se esqueça, o shell não sabe a diferença entre vários argumentos e arquivos com um espaço neles. Você pode usar aspas para dizer ao shell quando um único argumento deve ter um espaço:

Por exemplo, ren %%i %%~nc.%%i , altere para ren "%%i" "%%~nc.%%i"

E coloque aspas em torno de quaisquer outros argumentos em seu programa que possam ter espaços incorporados.

    
por 10.09.2014 / 17:59