Не могу зациклить файлы с пробелами в имени файла, пакетном файле Windows и магии изображения - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь перебрать кучу папок, создать подпапки, затем зациклить файлы, преобразовать их с помощью imagemagick и поместить их в новые подпапки и переименовать их. Некоторые файлы имеют пробелы в названии и вызывают ошибку ... Как я могу это исправить?

сообщение об ошибке:

convert: unable to open image 'photo': No such name or directory @error/blob.c/OpenBlob/3489. convert: no decode delegate for this image format '' @ error/constitute.c/ReadImage/554.**

Структура папок выглядит следующим образом ... Структура папок выглядит следующим образом ...

batch_file.bat
folder_a
...photo 1.jpg
...photo1.jpg
folder_b
...photo 1.jpg
...photo2.png

Я хочу, чтобы все закончилось вот так

batch_file.bat
folder_a
...300
......1.webp
......1.jpg
......2.webp
......2.jpg
...600
......1.webp
......1.jpg
......2.webp
......2.jpg
...photo 1.jpg
...photoC.jpg
folder_b
...300
......1.webp
......1.jpg
......2.webp
......2.jpg
...600
......1.webp
......1.png
......2.webp
......2.png
...photo 1.jpg
...photoA.png

Если возможно, я бы хотел переименовать файлы в 1.jpg, 1.webp, 2.jpg, 2.webp и т. Д. *

Пакетный файл выглядит следующим образом ...

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
%~d1
CD "%~p1"
SET FOLDERS=300 600
FOR /D %%r IN (*) DO (
    CD %%r
    ECHO In Folder: %%r
    FOR %%f IN (%FOLDERS%) DO (
        MD %%f
        ECHO In Folder: %%f
        PAUSE
        FOR %%a IN (*.jpg, *.png) DO (
            convert %%a -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize %%f %%f\%%a   
            ECHO Converting File: %%a
            mogrify -format webp %%f\%%a
            PAUSE
        )
    )
    CD ..
)

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Благодаря @Stephan и его ответу у меня есть пробелы и переименование работает. Вот результат.

@echo off
%~d1
CD "%~p1"
SETLOCAL ENABLEDELAYEDEXPANSION
SET FOLDERS=300 600

FOR /D %%r IN (*) DO (
    CD %%r
    ECHO In Folder: %%r
    ECHO Checking for pngs
    FOR %%a IN (*.png) DO (
        ECHO Converting %%a to .jpg
        mogrify -format jpg "%%a"
    )
    FOR %%f IN (%FOLDERS%) DO (
        MD %%f
        ECHO In Folder: %%r\%%f
        SET counter=0
        FOR %%a IN (*.jpg) DO (
            SET /a counter+=1
            ECHO Optimizing File: %%a : Into !counter!%%~xa
            convert "%%a" -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize "%%f" "%%f\!counter!%%~xa"
            ECHO Converting Optimized File: !counter!%%~xa into .webp
            mogrify -format webp "%%f\!counter!%%~xa"
        )
    )
    CD ..
)
0 голосов
/ 02 сентября 2018

Для обработки имен файлов с пробелами заключите их в кавычки. Например, ваша команда

convert %%a -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize %%f %%f\%%a

должно измениться на

convert "%%a" -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize "%%f" "%%f\%%a"

то же самое с командой mogrify:

mogrify -format webp "%%f\%%a"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...