1

Я пытаюсь переименовать содержимое zip-файла, чтобы оно совпадало с именем zip-файла и командным файлом.

Это именно то, что я пытаюсь сделать: https://stackoverflow.com/questions/22853824/zip-file-to-unzip-and-rename-files-and-zip-back/25732864#25732864

это работает, но только если файлы zip не имеют пробела в имени файла. В противном случае он создает кучу пустых папок, где в имени файла zip появляется пробел.

Ответ Фила V работает хорошо, но я думаю, что его нужно немного уточнить:

:: # 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
    )
)

Обновление: ОК, работает с помощью веб-маркета (см. Решение ниже).

Потребовалось несколько проб и ошибок, но в конце концов я выяснил, где нужны кавычки, чтобы заставить работать так, как мне нужно. Точно так же, как webmarc сказал: «ставьте кавычки вокруг любых других аргументов в вашей программе, которые могут иметь встроенные пробелы».

1 ответ1

2

Не забывайте, что оболочка не знает разницы между несколькими аргументами и файлами с пробелом в них. Вы можете использовать кавычки, чтобы указать оболочке, когда в одном аргументе должен быть пробел:

Например, ren %%i %%~nc.%%i , измените на ren "%%i" "%%~nc.%%i"

И ставьте кавычки вокруг любых других аргументов в вашей программе, которые могут иметь встроенные пробелы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .