Войти

Показать полную графическую версию : [решено] Сделать скрипт для конвертации графики


Patroklos
09-01-2018, 17:23
Здравствуйте, у меня вопрос скорее теоретический. Дело в том что меня укусил Индус! Я мало по малу вожусь с графикой и иногда надо просто быстро сконвертировать пару картинок. В таком случае я использую драг анд дроп. И скрипт для этого написать дело несложное проблема в том что он фу!
@echo off
>nul chcp 65001
cd /d %~dp0
set Input=%*%
if ["%1"] neq [""] goto :skip
set Input=E:\CMD\WebP\unnamed-F17.png E:\CMD\WebP\unnamed-F7.png E:\CMD\WebP\unnamed-F18.png
:skip
SetLocal EnableExtensions EnableDelayedExpansion

for /f "tokens=1-24 delims= " %%a in ('echo %Input%') do (
if ["%%a"] neq [""] ( .\bin\cwebp "%%a" -o "%%~na.webp" ) else goto :eof
if ["%%b"] neq [""] ( .\bin\cwebp "%%b" -o "%%~nb.webp" ) else goto :eof
if ["%%c"] neq [""] ( .\bin\cwebp "%%c" -o "%%~nc.webp" ) else goto :eof
if ["%%d"] neq [""] ( .\bin\cwebp "%%d" -o "%%~nd.webp" ) else goto :eof
if ["%%e"] neq [""] ( .\bin\cwebp "%%e" -o "%%~ne.webp" ) else goto :eof
if ["%%f"] neq [""] ( .\bin\cwebp "%%f" -o "%%~nf.webp" ) else goto :eof
if ["%%g"] neq [""] ( .\bin\cwebp "%%g" -o "%%~ng.webp" ) else goto :eof
if ["%%h"] neq [""] ( .\bin\cwebp "%%h" -o "%%~nh.webp" ) else goto :eof
if ["%%i"] neq [""] ( .\bin\cwebp "%%i" -o "%%~ni.webp" ) else goto :eof
if ["%%j"] neq [""] ( .\bin\cwebp "%%j" -o "%%~nj.webp" ) else goto :eof
if ["%%k"] neq [""] ( .\bin\cwebp "%%k" -o "%%~nk.webp" ) else goto :eof
if ["%%l"] neq [""] ( .\bin\cwebp "%%l" -o "%%~nl.webp" ) else goto :eof
if ["%%m"] neq [""] ( .\bin\cwebp "%%m" -o "%%~nm.webp" ) else goto :eof
if ["%%n"] neq [""] ( .\bin\cwebp "%%n" -o "%%~nn.webp" ) else goto :eof
if ["%%o"] neq [""] ( .\bin\cwebp "%%o" -o "%%~no.webp" ) else goto :eof
if ["%%p"] neq [""] ( .\bin\cwebp "%%p" -o "%%~np.webp" ) else goto :eof
if ["%%q"] neq [""] ( .\bin\cwebp "%%q" -o "%%~nq.webp" ) else goto :eof
if ["%%r"] neq [""] ( .\bin\cwebp "%%r" -o "%%~nr.webp" ) else goto :eof
if ["%%s"] neq [""] ( .\bin\cwebp "%%s" -o "%%~ns.webp" ) else goto :eof
if ["%%t"] neq [""] ( .\bin\cwebp "%%t" -o "%%~nt.webp" ) else goto :eof
if ["%%u"] neq [""] ( .\bin\cwebp "%%u" -o "%%~nu.webp" ) else goto :eof
if ["%%v"] neq [""] ( .\bin\cwebp "%%v" -o "%%~nv.webp" ) else goto :eof
if ["%%w"] neq [""] ( .\bin\cwebp "%%w" -o "%%~nw.webp" ) else goto :eof
)
pause>nul
Как видите я написал много излишнего кода. Поэтому прошу помочь и подсказать как сделать всё хотя бы компактнее.
Что надо:
1) Получить в качестве аргументов список файлов.
2) Один за одним их обработать ( У меня не получилось создать переменную с переносами строки)
1.файл
2.файл
и т.д.
то есть имеем: 1.файл 2.файл
делаем:
1.файл
2.файл
пуляем в for
В дальнейшем собираюсь продолжать писать подобные скрипты и нужны знания. Поэтому теоретические советы горячо приветствуются. Спасибо!

Iska
09-01-2018, 17:56
Что надо: »
Не надо. Здесь Вы излагаете выбранное Вами решение задачи. Что надо в реальности: изложить саму Вашу задачу. Словами, чтобы не пытаться разбираться в выложенном Вами коде.

То есть, Вам нужно подробно изложить словами вот это:
надо просто быстро сконвертировать пару картинок »

Patroklos
09-01-2018, 19:39
Я не понял вашей реакции но попробую определить задачу более узко.
Мне нужно создать скрипт который будет конвертировать графику из png в webp.
Я беру и кидаю на значок bat произвольное количество файлов png и к ним по очереди применяется команда
.\bin\cwebp.exe "file.png" -o "file.webp"

Iska
09-01-2018, 19:51
Относительная ссылка в:
.\bin\cwebp.exe »
разве тут уместна?

Общий принцип таков:
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=%~1

if not defined sFile (
echo Usage: %~nx0 ^<Source file^> [^<Source file^> ...]
exit /b 1
)

:Repeat
".\bin\cwebp.exe" "%~1" -o "%~n1.webp"
shift
if "%~1" neq "" goto :Repeat

endlocal
exit /b 0

Patroklos
09-01-2018, 20:29
Спасибо, работает отлично. Крутое решение и всего в несколько строк.




© OSzone.net 2001-2012