Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: wolf0425
Дата сообщения: 25.06.2010 10:00
res2001 SLIDER999
если сообщение об ошибке всегда из двух слов - то "tokens=1-4" и %%a %%b %%c %%d соответсвенно.
но лучше все же так не закладываться и отрезать хвост регэкспом

Код: sed -r "s; +--->.*$;;g" <test.txt >text2.txt
Автор: SLIDER999
Дата сообщения: 25.06.2010 10:00
res2001
спасибо, но если описание не состоит из 1 или 2 слов
вот возможные варианты:
Неверный формат - 2
Старый файл - 2
В файле нет меток формата - 5 !!!
Нет набора параметров - 3

Вобщем не очень отрабатывает. Как еще можно улучшить?
Автор: wolf0425
Дата сообщения: 25.06.2010 10:06
SLIDER999
Цитата:
Вобщем не очень отрабатывает. Как еще можно улучшить?
не рассчитывать на халяву и использовать sed.
без седа в принципе можно - но тошно.

Автор: res2001
Дата сообщения: 25.06.2010 10:17
SLIDER999

Код: @echo off
for /F "tokens=1-3,*" %%a in (test.txt) do (
    for /F "tokens=1 delims=>-" %%i in ("%%d") do echo %%a %%b %%c %%i
)
Автор: lorents
Дата сообщения: 25.06.2010 11:21
Добрый день!
Помогите решить следующую задачу

Код: @echo off
for /f "delims=" %%i in ('dir /b /s /a-d Dir1\*.png') do (
    for %%j in (32k,16k,8k,4k,2k,1k,512,256) do (
        "%~dp0Docs\prepng.exe" "%%~fi" "%%~dpni_%%j.png"
        call :pngopt "%%~dpni_%%j.png"
        "%~dp0Docs\pngout.exe" /k0 /n2 "%%~dpni_%%j.png"
        "%~dp0Docs\advpng.exe" -z -4 "%%~dpni_%%j.png"
        "%~dp0Docs\deflopt.exe" "%%~dpni_%%j.png"
    )
)

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw%%j -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > %temp%\png.log
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
    set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1
Автор: igor_andreev
Дата сообщения: 25.06.2010 11:38
lorents

Код:
for %%j in (32k,16k,8k,4k,2k,1k,512,256) do (
"%~dp0Docs\prepng.exe" "%%~fi" "%%~dpni_%%j.png"
call :pngopt "%%~dpni_%%j.png" %%j
Автор: us0r
Дата сообщения: 25.06.2010 11:46
%%j вроде как счётчик?
Всяко можешь попробовать:

Код: setlocal enabledelayedexpansion
set "var!ololo!"="%%j"
Автор: SLIDER999
Дата сообщения: 25.06.2010 11:50
res2001
и снова спасибо

Другая задача:
есть лог, содержание

Цитата:
S:\ПетровАМ\_Скрипты\log\LOG_TEMP\07_06_20_dat.log
S:\ПетровАМ\_Скрипты\log\LOG_TEMP\07_06_21_dat.log
S:\ПетровАМ\_Скрипты\log\LOG_TEMP\07_06_22_dat.log
S:\ПетровАМ\_Скрипты\log\LOG_TEMP\07_06_23_dat.log
S:\ПетровАМ\_Скрипты\log\LOG_TEMP\07_06_24_dat.log
и т.д.

Нужно привести к виду:

Цитата:
LOG_TEMP\07_06_20_dat.log
LOG_TEMP\07_06_21_dat.log
LOG_TEMP\07_06_22_dat.log
LOG_TEMP\07_06_23_dat.log
LOG_TEMP\07_06_24_dat.log
и т.д.


Заранее спаибо! Надеюсь на помощь
Автор: igor_andreev
Дата сообщения: 25.06.2010 12:07
SLIDER999
for /f "tokens=4* delims=\" %%a in (old.txt) do echo %%b>>new.txt
Автор: mugil_cephalus
Дата сообщения: 25.06.2010 12:09
gryu
если тебе все еще нужен
Цитата:
Теперь выбор папки остался.

можешь поискать здесь ( не уверен есть ли такой в наличии )
http://ss64.net/westlake/nt/
и
http://www.robvanderwoude.com/batchtools.php
Автор: lorents
Дата сообщения: 25.06.2010 12:10
igor_andreev
сработало, спасибо
Автор: res2001
Дата сообщения: 25.06.2010 12:29
igor_andreev
Это справедливо только для варианта, когда последовательность подкаталогов состоит из 4.
Вот общий случай:
SLIDER999

Код: @echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%a in (test.txt) do (
    set bb=%%~pa
    set bb=!bb:~,-1!.txt
    call :lastname %%~nxa !bb!
)
goto:eof

:lastname
echo %~n2\%1
exit /b
Автор: SLIDER999
Дата сообщения: 25.06.2010 12:40
igor_andreev
res2001
спасибо !!!

Теперь еще Если можно конечно

есть файл get.log:

Цитата:
LOG_TEMP\07_06_20_dat.log
LOG_TEMP\07_06_21_dat.log
LOG_TEMP\07_06_22_dat.log
LOG_TEMP\07_06_23_dat.log
LOG_TEMP\07_06_24_dat.log
LOG_TEMP\07_06_25_dat.log
и т.д.


Есть часть скрипта:

Цитата:
:: Делаем финальный finish.log
if exist get.log For /F "Delims=" %%I In (get.log) Do (
echo = = = =     >>finish.log
echo = = = ======================     %%I>>finish.log
echo = = = =     >>finish.log
findstr "\ERRORDAT" %%I>>finish.log
echo..>>finish.log
)


В результате получается неподъемный finish.log - больше 60 мб

Как сделать разделение, допустим finish1.log, finish2.log по месяцам? (где 07_06_25_dat.log - год_месяц_день_dat.log)

Заранее спасибо
Автор: lorents
Дата сообщения: 25.06.2010 13:34
Хочу сделать отчет об оптимизации изображений, но не знаю как получить первоначальный размер файла, а ведь его обрабатываю?
И еще как можно сохранить полученную таблицу в Excel?

[more=ImageOptimizer.bat]
Код: @echo off
TITLE ImageOptimizer 1.0.2.0 от 01.07.2010
echo Image Optimizer - сборник программ для оптимизации изображений (PNG, JPEG) без потери качества (под оптимизацией понимается попиксельная беспотерьность при уменьшении размера в рамках того же формата), состоящий из следующих программ:
echo * Advpng (входит в состав AdvanceComp 1.15 от 01.11.2005);
echo * DeflOpt 2.07 от 05.09.2007;
echo * Jhead 2.90 от 05.02.2010;
echo * Jpegtran (входит в состав Libjpeg 8b от 16.05.2010);
echo * OptiPng 0.6.4 от 15.03.2010;
echo * PngCrush 1.7.11 от 10.05.2010;
echo * PngOut от 09.06.2010;
echo * PrePng от 17.05.10;
echo * Zlib 1.2.5 от 19.04.2010.
echo Автор не несет ответственность за работу данного приложения.
echo Вы используете данную программу под свой страх и риск.
echo Скопируйте необходимые изображения или папки с изображениями в папку "Images" и нажмите на Enter для продолжения.

pause>nul

:png
1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
echo Параметр оптимизации PNG:
echo [1] Noninterlaced;
echo [2] Adam7 (Interlaced).
set /p png="Укажите параметр оптимизации PNG и нажмите на Enter: "

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg && goto:loop2
if defined png goto :pngwork
echo Изображения формата *.png и *.jpg (*.jpeg) в папке "Images" не обнаружены.
echo Нажмите на Enter для выхода из приложения.
pause>nul
goto:eof

:loop2
echo Параметр оптимизации JPEG:
echo [1] Optimize;
echo [2] Progressive;
echo [3] Progressive vs. Optimize (сравниваются по размеру файлы, полученные обоими методами сжатия, и выбирается файл с наименьшим размером).
echo Внимание: при Progressive'ом методе сжатие оригинальное и полученное изображения попиксельно будут отличаться, но на глаз определить не возможно.
set /p jpeg="Укажите параметр оптимизации JPEG и нажмите на Enter: "

:pngwork
if not defined png goto :jpegwork
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:loop1

:Noninterlaced
echo Noninterlaced
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    "%~dp0Docs\prepng.exe" "%%~fi"
    call :pngopt "%%~fi"
    "%~dp0Docs\advpng.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
)
goto :jpegwork

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > %temp%\png.log
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
    set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1
goto :jpegwork

:Adam7
echo Adam7
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    "%~dp0Docs\prepng.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -i1 "%%~fi"
    "%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    "%~dp0Docs\advpng.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    "%~dp0Docs\advpng.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
)

:jpegwork
if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:Progressive_Optimize
goto:eof

:Optimize
echo JPEG - Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:Progressive
echo JPEG - Progressive
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:Progressive_Optimize
echo JPEG - Progressive vs. Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    "%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
    "%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
    call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
)
goto:eof

:compare
if %~z1 LSS %~z2 (
    DEL /F /Q %2
    DEL /F /Q %3
    REN %1 %4
) else (
    DEL /F /Q %1
    DEL /F /Q %3
    REN %2 %4
)
goto:eof
Автор: res2001
Дата сообщения: 25.06.2010 13:42
SLIDER999


Код: @echo off
rem Делаем финальный finish.log
setlocal enabledelayedexpansion
set mm=0
if exist get.log For /F "Delims=" %%I In (get.log) Do (
for /F "tokens=4 delims=\_" %%a in ("%%I") do if !mm! neq %%a set mm=%%a
echo = = = = >>finish!mm!.log
echo = = = ====================== %%I>>finish!mm!.log
echo = = = = >>finish!mm!.log
findstr "\ERRORDAT" %%I>>finish!mm!.log
echo..>>finish!mm!.log
)
Автор: wolf0425
Дата сообщения: 25.06.2010 13:49

Цитата:
но не знаю как получить первоначальный размер файла, а ведь его обрабатываю?
точно так же как текущий размер, только запомнить до обработки.
до просветления курить call /? и накиданные тебе примеры с печатью размера, включая приведенный тобою батник. всё там есть.


Цитата:
И еще как можно сохранить полученную таблицу в Excel?

в .csv пиши, нафиг тебе форматирование ячеек.

Автор: res2001
Дата сообщения: 25.06.2010 13:50
lorents

Цитата:
первоначальный размер файла

размер файла можно получить так: %~z1

Цитата:
И еще как можно сохранить полученную таблицу в Excel?

В excel из бат никак. Ты можешь сделать csv - текстовый файл с разделителями и открывать его в екселе как то так: excel.exe file.csv. Только надо предварительно опередлится, какой там у ексела стандартный разделитель, это уже можно методом проб.

А если делать по уму какой-то отчет в екселе, то надо заюзать vbs или js.

Добавлено:
или vba из ексела непосредственно, что гораздо удобнее.
Автор: wolf0425
Дата сообщения: 25.06.2010 13:53

Цитата:
Только надо предварительно опередлится, какой там у ексела стандартный разделитель,
колонок - ;
т.е. писать в файл что-то типа
Код: "col 1";"col 2";"col 3";"col 4";
111;222;333;444;
Автор: lorents
Дата сообщения: 25.06.2010 15:14
я не много не могу представить как мне сделать отчет
можно пример, на базе одного из моих циклов?
Автор: res2001
Дата сообщения: 25.06.2010 15:22
lorents
не увидел у тебя в коде создания отчета.
В общем случае так:
echo %1;%2;%3 >>file.csv
Автор: lorents
Дата сообщения: 25.06.2010 15:47
res2001
Я так понимаю, что я должен получить первоначальный список файлов с размерами, для этого я должен написать код в начале :loop1 и :loop2, и в конце после обработки
я просто не понимаю что надо прописать?
Вы не могли поподробнее написать?

Добавлено:
и еще один вопрос, пытался сделать проверку на наличие необходимых файлов

Код: set DocDir="%~dp0Docs\"
PATH %DocDir%;%PATH% >nul
if not exist %DocDir%advdef.exe echo AdvPng missing! & goto:eof
if not exist %DocDir%deflopt.exe echo DeflOpt missing! & goto:eof
if not exist %DocDir%jhead.exe echo Jhead missing! & goto:eof
if not exist %DocDir%jpegtran.exe echo Jpegtran missing! & goto:eof
if not exist %DocDir%optipng.exe echo OptiPng missing! & goto:eof
if not exist %DocDir%pngcrush.exe echo PngCrush missing! & goto:eof
if not exist %DocDir%pngout.exe echo PngOut missing! & goto:eof
if not exist %DocDir%prepng.exe echo PrePng missing! & goto:eof
if not exist %DocDir%zlib.dll echo Zlib missing! & goto:eof
Автор: wolf0425
Дата сообщения: 25.06.2010 16:00

Цитата:
Хотел спросить, где я ошибся, выдает что AdvPng
предлагаешь помочь тебе найти в коде строку, где накписано AdvPng ???
Автор: lorents
Дата сообщения: 25.06.2010 16:11
wolf0425
ой не дописал, выдает "AdvPng missing!", хотя файл advdef.exe есть в папке Docs
Автор: res2001
Дата сообщения: 25.06.2010 19:30
lorents
Смотрел твой код.
Есть вопрос.
В процедуре :Noninterlaced есть вызов call :pngopt "%%~fi"
Ты предполагаешь что после обработки в :pngopt код должен был бы продолжить выполняться со строки после call :pngopt?
На сколько я вижу, сейчас в :Noninterlaced вообще делается только пол итерации, независимо от количества файлов *.png, после вызова :pngopt управление не передается назад в :Noninterlaced, а переходит в goto :jpegwork из :pngopt.
Если надо возвращаться в :Noninterlaced то в конце :pngopt вместо goto :jpegwork надо поставить exit /b.
Автор: lorents
Дата сообщения: 25.06.2010 19:37
res2001
Не поверишь, но я только что это исправил


Цитата:
Если надо возвращаться в :Noninterlaced то в конце :pngopt вместо goto :jpegwork надо поставить exit /b.

я просто убрал goto :jpegwork, и заработало, но на всякий случай написал exit /b

Спасибо
Автор: res2001
Дата сообщения: 25.06.2010 19:38
Кстати и в :compare та же история.

[more=Код поправил]

Код: @echo off
TITLE ImageOptimizer 1.0.2.0 от 01.07.2010
echo Image Optimizer - сборник программ для оптимизации изображений (PNG, JPEG) без потери качества (под оптимизацией понимается попиксельная беспотерьность при уменьшении размера в рамках того же формата), состоящий из следующих программ:
echo * Advpng (входит в состав AdvanceComp 1.15 от 01.11.2005);
echo * DeflOpt 2.07 от 05.09.2007;
echo * Jhead 2.90 от 05.02.2010;
echo * Jpegtran (входит в состав Libjpeg 8b от 16.05.2010);
echo * OptiPng 0.6.4 от 15.03.2010;
echo * PngCrush 1.7.11 от 10.05.2010;
echo * PngOut от 09.06.2010;
echo * PrePng от 17.05.10;
echo * Zlib 1.2.5 от 19.04.2010.
echo Автор не несет ответственность за работу данного приложения.
echo Вы используете данную программу под свой страх и риск.
echo Скопируйте необходимые изображения или папки с изображениями в папку "Images" и нажмите на Enter для продолжения.

pause>nul

setlocal ENABLEDELAYEDEXPANSION
set logfile=log.csv

:png
1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
echo Параметр оптимизации PNG:
echo [1] Noninterlaced;
echo [2] Adam7 (Interlaced).
set /p png="Укажите параметр оптимизации PNG и нажмите на Enter: "

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg && goto:loop2
if defined png goto :pngwork
echo Изображения формата *.png и *.jpg (*.jpeg) в папке "Images" не обнаружены.
echo Нажмите на Enter для выхода из приложения.
pause>nul
goto:eof

:loop2
echo Параметр оптимизации JPEG:
echo [1] Optimize;
echo [2] Progressive;
echo [3] Progressive vs. Optimize (сравниваются по размеру файлы, полученные обоими методами сжатия, и выбирается файл с наименьшим размером).
echo Внимание: при Progressive'ом методе сжатие оригинальное и полученное изображения попиксельно будут отличаться, но на глаз определить не возможно.
set /p jpeg="Укажите параметр оптимизации JPEG и нажмите на Enter: "

:pngwork
if not defined png goto :jpegwork
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:loop1

:Noninterlaced
echo Noninterlaced
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
set origsize=%%~zi
"%~dp0Docs\prepng.exe" "%%~fi"
call :pngopt "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
echo %%i;!origsize!;%%~zi >>%logfile%
)
goto :jpegwork

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > %temp%\png.log
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1
exit /b

:Adam7
echo Adam7
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
set origsize=%%~zi
"%~dp0Docs\prepng.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -i1 "%%~fi"
"%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
echo %%i;!origsize!;%%~zi >>%logfile%
)

:jpegwork
if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:Progressive_Optimize
goto:eof

:Optimize
echo JPEG - Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
echo %%i;!origsize!;%%~zi >>%logfile%
)
goto:eof

:Progressive
echo JPEG - Progressive
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
echo %%i;!origsize!;%%~zi >>%logfile%
)
goto:eof

:Progressive_Optimize
echo JPEG - Progressive vs. Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
echo %%i;!origsize!;%%~zi >>%logfile%
)
goto:eof

:compare
if %~z1 LSS %~z2 (
DEL /F /Q %2
DEL /F /Q %3
REN %1 %4
) else (
DEL /F /Q %1
DEL /F /Q %3
REN %2 %4
)
exit /b
Автор: lorents
Дата сообщения: 25.06.2010 20:07
res2001
Супер, Большое спасибо
Хотел спросить, как можно убрать путь к файлу, оставить только имя и расширение?
И еще один вопрос, как можно создать еще один столбец, чтобы показать на сколько % уменьшился файл?

Пока тестировал заметил один баг, при вводе параметров, Как сделать чтобы в параметр оптимизации PNG можно было вводить только значение 1 и 2, и если пользователь вел другое значение, то повторить запрос, а если ничего не ввел и нажал на Enter, то пропустить оптимизацию файлов PNG

Тоже самое в JPEG

res2001
еще раз большое спасибо!

Добавлено:

Цитата:
goto:eof поубирай из всех строк и добавь в самом конце после всех if

попробовал так

Код: if not exist "%~dp0Docs\advpng.exe" echo AdvPng missing!
if not exist "%~dp0Docs\deflopt.exe" echo DeflOpt missing!
if not exist "%~dp0Docs\jhead.exe" echo Jhead missing!
if not exist "%~dp0Docs\jpegtran.exe" echo Jpegtran missing!
if not exist "%~dp0Docs\optipng.exe" echo OptiPng missing!
if not exist "%~dp0Docs\pngout.exe" echo PngOut missing!
if not exist "%~dp0Docs\prepng.exe" echo PrePng missing!
if not exist "%~dp0Docs\zlib.dll" echo Zlib missing!
pause>nul
goto:eof
Автор: res2001
Дата сообщения: 25.06.2010 20:32
lorents

Цитата:
работает, но хотелось чтобы выдавалось сообщение, если хотя бы один файл не найден "следующие файлы не найдены:"
и только после этого список не найденных файлов


if not exist "%~dp0Docs\advpng.exe" set "nofile=AdvPng "
if not exist "%~dp0Docs\deflopt.exe" set "nofile=%nofile%DeflOpt "
if not exist "%~dp0Docs\jhead.exe" set "nofile=%nofile%Jhead "
if not exist "%~dp0Docs\jpegtran.exe" set "nofile=%nofile%Jpegtran "
if not exist "%~dp0Docs\optipng.exe" set "nofile=%nofile%OptiPng "
if not exist "%~dp0Docs\pngout.exe" set "nofile=%nofile%PngOut "
if not exist "%~dp0Docs\prepng.exe" set "nofile=%nofile%PrePng "
if not exist "%~dp0Docs\zlib.dll" set "nofile=%nofile%Zlib"
if defined nofile echo Слудющие файлы не найдены: %nofile%
pause>nul
goto:eof

Остальное сейчас сделаю.
Автор: lorents
Дата сообщения: 25.06.2010 20:40
res2001
Спасибо!


Цитата:
Остальное сейчас сделаю.

не знаю как Вас и благодарить
Автор: res2001
Дата сообщения: 25.06.2010 20:42
lorents
[more=Код]
Код: @echo off
TITLE ImageOptimizer 1.0.2.0 от 01.07.2010
echo Image Optimizer - сборник программ для оптимизации изображений (PNG, JPEG) без потери качества (под оптимизацией понимается попиксельная беспотерьность при уменьшении размера в рамках того же формата), состоящий из следующих программ:
echo * Advpng (входит в состав AdvanceComp 1.15 от 01.11.2005);
echo * DeflOpt 2.07 от 05.09.2007;
echo * Jhead 2.90 от 05.02.2010;
echo * Jpegtran (входит в состав Libjpeg 8b от 16.05.2010);
echo * OptiPng 0.6.4 от 15.03.2010;
echo * PngCrush 1.7.11 от 10.05.2010;
echo * PngOut от 09.06.2010;
echo * PrePng от 17.05.10;
echo * Zlib 1.2.5 от 19.04.2010.
echo Автор не несет ответственность за работу данного приложения.
echo Вы используете данную программу под свой страх и риск.
echo Скопируйте необходимые изображения или папки с изображениями в папку "Images" и нажмите на Enter для продолжения.

pause>nul

setlocal ENABLEDELAYEDEXPANSION
set logfile=file.log

:png
1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
set png=
echo Параметр оптимизации PNG:
echo [1] Noninterlaced;
echo [2] Adam7 (Interlaced).
set /p png="Укажите параметр оптимизации PNG и нажмите на Enter: "
if defined png if "%png%" neq "1" if "%png%" neq "2" goto:loop1

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg && goto:loop2
if defined png goto :pngwork
echo Изображения формата *.png и *.jpg (*.jpeg) в папке "Images" не обнаружены.
echo Нажмите на Enter для выхода из приложения.
pause>nul
goto:eof

:loop2
set jpeg=
echo Параметр оптимизации JPEG:
echo [1] Optimize;
echo [2] Progressive;
echo [3] Progressive vs. Optimize (сравниваются по размеру файлы, полученные обоими методами сжатия, и выбирается файл с наименьшим размером).
echo Внимание: при Progressive'ом методе сжатие оригинальное и полученное изображения попиксельно будут отличаться, но на глаз определить не возможно.
set /p jpeg="Укажите параметр оптимизации JPEG и нажмите на Enter: "
if defined jpeg if "%jpeg%" neq "1" if "%jpeg%" neq "2" if "%jpeg%" neq "3" goto:loop2

:pngwork
if not defined png goto :jpegwork
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:jpegwork

:Noninterlaced
echo Noninterlaced
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
set origsize=%%~zi
"%~dp0Docs\prepng.exe" "%%~fi"
call :pngopt "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
call :savelog "%%i" !origsize!
)
goto :jpegwork

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > %temp%\png.log
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /n2 /f%f% %1
exit /b

:Adam7
echo Adam7
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
set origsize=%%~zi
"%~dp0Docs\prepng.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -i1 "%%~fi"
"%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
"%~dp0Docs\optipng.exe" -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
"%~dp0Docs\advpng.exe" -z -4 "%%~fi"
"%~dp0Docs\deflopt.exe" "%%~fi"
call :savelog "%%i" !origsize!
)

:jpegwork
if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:Progressive_Optimize
goto:eof

:Optimize
echo JPEG - Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
call :savelog "%%i" !origsize!
)
goto:eof

:Progressive
echo JPEG - Progressive
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
call :savelog "%%i" !origsize!
)
goto:eof

:Progressive_Optimize
echo JPEG - Progressive vs. Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
set origsize=%%~zi
"%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
"%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
"%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
call :savelog "%%i" !origsize!
)
goto:eof

:compare
if %~z1 LSS %~z2 (
DEL /F /Q %2
DEL /F /Q %3
REN %1 %4
) else (
DEL /F /Q %1
DEL /F /Q %3
REN %2 %4
)
exit /b

:savelog
set /a "perc=%~z1*1000/%2"
echo %~nx1;%2;%~z1;%perc:~,-1%.%perc:~-1% >>%logfile%
exit /b

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.