zip-файл (с пробелами в имени файлов) распаковать и переименовать файлы и ZIP обратно

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

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

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

Phil Ответ 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
    )
)

Update: OK работает с помощью webmarc (см. Решение ниже).

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

6
задан Community
11.01.2023 17:26 Количество просмотров материала 3431
Распечатать страницу

1 ответ

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

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

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

2
отвечен webmarc 2023-01-13 01:14

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх