Questão arquivo zip (com espaços no nome dos arquivos) para descompactar e renomear arquivos e zipar de volta


Eu estou tentando renomear o conteúdo de um arquivo zip para coincidir com o nome do arquivo zip com um arquivo em lotes.

Isso é exatamente o que estou tentando fazer: https://stackoverflow.com/questions/22853824/zip-file-to-unzip-and-rename-files-and-zip-back/25732864#25732864

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).

Demorou um pouco de tentativa e erro, mas eventualmente eu descobri onde as citações são necessárias para fazê-lo funcionar da maneira que eu preciso. Assim como o webmarc disse, "coloque aspas em torno de quaisquer outros argumentos em seu programa que possam ter espaços embutidos".


1


origem


Qual é a sua pergunta real? Como fazer o script funcionar com arquivos que possuem espaços neles? - Adam
@Adam - sim, essa é a minha pergunta real, desculpe. Como fazer o script funcionar com arquivos que possuem espaços neles? - DigablePlanets


Respostas:


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, mudar para ren "%%i" "%%~nc.%%i"

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


2