2015-01-06 3 views
0

У меня есть .bat-файл, который применит несколько быстрых преобразований ImageMagick в большой коллекции подкаталогов. Мне нужно, чтобы этот скрипт также выводил выходные файлы на AWS S3 с помощью утилиты S3Express (вариант Windows S3cmd).Вызов S3Express в пакетном режиме, команда pass, loop

echo off 
set dest=destination-bucket/testfolder/ 
for /D %%d in (*) do (
    cd %%d 
    ​​md small 
    convert %1 -resize 350x350 -quality 80 -strip ./small/image.jpg 
    md medium 
    convert %1 -resize 640x640 -quality 80 -strip ./medium/image.jpg 
    md large 
    convert %1 -resize 1080x1080 -quality 30 -strip ./large/image.jpg 
    md xlarge 
    convert %1 -resize 1440x1440 -quality 30 -strip ./xlarge/image.jpg 
    cd.. 
    "C:\Program Files\S3Express\S3Express.exe" 
    put %%d %dest% -s -cacl:public-read -cond:"name matches 'image.jpg'" 
    REM -s == recursive (replicates subfolder structure) 
    REM -cacl == canned access control list (ACL) :: Everyone gets READ access 
    REM -cond == filter :: only pushes "image.jpg" files. 
) 

Названный как «conv.bat», я бы использовал это как «conv image.jpg».

Проблема возникает с «put», которая является S3Express command.

Как я могу заставить свой скрипт подключить команду put в S3Express в конце каждого цикла? В текущем состоянии скрипт запускается через цикл один раз, останавливаясь после того, как он открывает «S3Express.exe».

Возможно, уместно отметить, что это мой первый пакетный скрипт, и мой первый раз с использованием S3Express.

+1

Кстати, вы можете сделать «md small med large xlarge» одним выстрелом, а не стрелять 4 раза. Вы также можете сделать все ваши IM-преобразования одним выстрелом и сэкономить много времени, если у вас много изображений ... 'convert% 1 -strip \ (+ clone -resize 350x350 -quality 80 -write small/image.jpg \) \ (+ clone -resize 640x640 -quality 80 -write med/image.jpg \) ... -resize 1440x1440 -quality 30 large/image.jpg' –

+0

@MarkSetchell Эй, спасибо за «md» однострочный , это действительно здорово. Что касается конденсации ImageMagick, то он более функциональный и/или быстрый, чтобы только запустить «конвертировать» один раз? На мой взгляд, это не так читаемо, но если есть выигрыш в производительности, я бы выбрал это. – SCK

+0

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

ответ

0

Я предполагаю, что вы пытаетесь запустить S3Express.exe и введите команду put. Как и в обычной командной строке. Однако, когда вы вызываете S3Express.exe, вы вызываете новый процесс в том же окне - все следующие команды не будут выполняться до тех пор, пока этот процесс не будет завершен.

Посмотрев на some of the S3Express documentation, я считаю, что вы должны сделать следующее - все на одной линии.

"C:\Program Files\S3Express\S3Express.exe" "put %%d %dest%" -s -cacl:public-read -cond:"name matches 'image.jpg'" -exit 

-exit на конце концов, так что вы не застряли в контексте S3Express после выполнения команды, и ваш цикл должен продолжаться.

Я не уверен, как кавычки (после расширения переменной) будут работать в части "put %%d %dest%" - в соответствии с документацией вам необходимо избежать кавычек с \. Возможно, вам придется заменить его на следующее: "put \"%%~d\" \"%dest%\"".