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

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

Автор: mugil_cephalus
Дата сообщения: 21.03.2010 11:46
wolf0425

Цитата:
pushd C:\RECYCLER\ && rd /s /q .

сейчас потестил; то есть это удалает не только каталоги, но и файлы - то есть все, что есть внутри, кроме RECYCLER ?
Автор: wolf0425
Дата сообщения: 21.03.2010 12:02

Цитата:
Бантик просто берет и вырубается после оптимизации файла,
который из батников вырубается досрочно - с for или который оптимизирует?
не должно там ничего вырубаться
Автор: lorents
Дата сообщения: 21.03.2010 12:13
wolf0425

Цитата:
который из батников вырубается досрочно - с for или который оптимизирует?

А как можно определить это?
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 12:21
lorents
запусти первый в консоли
Автор: lorents
Дата сообщения: 21.03.2010 12:25
mugil_cephalus

Цитата:
запусти первый в консоли

Я как понимаю проблема в crunch
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 12:40
lorents

Цитата:
for %i in (*.png) do call crunch %i

запусти второй в консоли
crunch.bat example.png
Автор: Alukardd
Дата сообщения: 21.03.2010 12:47
01MDM
большое спасибо! не знаю в который раз вы мну уже выручаете

вот только хотелось бы кое что разъяснить...
я не 1-ый раз уже встречаю запись вида <цифра> > nul, но не понимаю что каждая из них делает... Пока встречал только 0, 1, 2
1 я кажется понял что делает... она равносильна строке <команда> > nul
0 если я правильно понял, то он скидывает на nul-вывод всё, что пишется с клавы, или если более масштабно, то все что пытается записаться на консоль, кроме самой строчки с этой командой?
Поправьте если, что не так говорю... И если можно, то человеческие объяснения услышать хочу. а не свои догадки... И про 2 не забудьте, и если еще цифры?
Автор: lorents
Дата сообщения: 21.03.2010 13:00
mugil_cephalus

Цитата:
запусти второй в консоли

все понял, если делаю как Вы говорите, то все работает
а если через батник, но работает, а потом обрывается работа

Проблемы с батником больше нет, все получилось

У меня в бантике есть два отдельных цикла:

Код: for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    optipng.exe -i0 "%%~fi"
    pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
    optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
    pngout.exe "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
)
Автор: 01MDM
Дата сообщения: 21.03.2010 14:18
Alukardd
Это перенаправление стандартных потоков ввода-вывода.

0 - STDIN (ввод)
1 - STDOUT (вывод)
2 - STDERR (ошибки)

Поток может перенаправляться в файл, в nul или на дескриптор другого потока.
Можно почитать в справке к cmd (hh ntcmds.chm)
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 14:25
lorents

Цитата:
Как можно сделать так чтобы пользователь мог сам выбирать, какой из циклов ему запустить?


http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=500#9
Автор: lorents
Дата сообщения: 21.03.2010 15:02
mugil_cephalus
то что надо, спасибо, попытался сделать вот что получилось
[more]
Код: @echo off
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p tsk="Choose a task by number: "

if not defined tsk goto:eof
if %tsk%==1 goto:1
if %tsk%==2 goto:2
goto:eof

:1
echo 1
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    call png.cmd "%%~fi"
    pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
)
goto:eof

:2
echo 2
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    optipng.exe -i1 "%%~fi"
    pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
    optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
)
goto:eof
Автор: METAJIJI
Дата сообщения: 21.03.2010 15:36
есть ini файл, из которого надо прочитать значения переменных

Код:
param0=value0
;param1=value1
param2=value2
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 15:38
lorents

Цитата:
1. как сделать чтобы если пользователь вдруг ввел такой символ, который отсутствует в запросе, запрос повторился?


Код: @echo off
:loop
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p tsk="Choose a task by number: "

if not defined tsk goto:eof
if %tsk%==1 goto:1
if %tsk%==2 goto:2
if /i "_%tsk%" neq "_1" if /i "_%tsk%" neq "_2" goto:loop
goto:eof

:1
echo 1
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
call png.cmd "%%~fi"
pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
)
goto:eof

:2
echo 2
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
optipng.exe -i1 "%%~fi"
pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
)
goto:eof
Автор: lorents
Дата сообщения: 21.03.2010 16:05
mugil_cephalus
Спасибо за код


Цитата:
Цитировать

Надо указать полный путь к файлу?
Если не трудно можно пример?
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 16:20
lorents

Цитата:
Подскажите, пожалуйста, мне надо запустить приложение, которое находится в папке Docs
я прописываю
Код:Docs\pngcrush.exe
но у меня не запускается, почему?

напрмер, так - том:\путь\Docs\pngcrush.exe
Автор: lorents
Дата сообщения: 21.03.2010 16:22
mugil_cephalus

Цитата:
напрмер, так - том:\путь\Docs\pngcrush.exe

Я имел ввиду как получить путь, я просто не знаю где будет находится pngcrush.exe, я только знаю что в папке Docs, а папка Docs находится в той же папке что мой батник

Добавлено:
mugil_cephalus
Вы не поможете разобраться со вторым вопросом?
как сделать если в папке Images нет файлов *.png, то запрос не выдается, а пишется что файлов *.png в папке Images не обнаружилось? тоже самое для jpeg. И если можно чтобы все запросы выводились до запуска циклов?
Просто у меня кроме png есть еще jpeg
[more]
Код: @echo off
:loop
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p png="Choose a task by number: "

if not defined png goto:eof
if %png%==1 goto:1
if %png%==2 goto:2
if /i "_%png%" neq "_1" if /i "_%png%" neq "_2" goto:loop
goto:eof

:1
echo 1
Rem Оптимизация PNG (Interlace - Noninterlaced)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    call png.cmd "%%~fi"
    pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
)
goto:eof

:2
echo 2
Rem Оптимизация PNG (Interlace - Adam7)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    optipng.exe -i1 "%%~fi"
    pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
    optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    advdef.exe -z -4 "%%~fi"
    deflopt.exe "%%~fi"
)
goto:eof

:loop
echo [1] JPEG - Progressive
echo [2] JPEG - Optimize
echo [3] JPEG - Progressive vs. Optimize

set /p jpeg="Choose a task by number: "

if not defined jpeg goto:eof
if %jpeg%==1 goto:1
if %jpeg%==2 goto:2
if %jpeg%==3 goto:3
if /i "_%jpeg%" neq "_1" if /i "_%jpeg%" neq "_2" if /i "_%jpeg%" neq "_3" goto:loop
goto:eof

:1
echo 1
Rem Оптимизация JPEG (Progressive)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    jpegtran.exe -copy all -progressive "%%~fi" "%%~fi"
    jhead.exe -dc -de -di -dx -du "%%~fi"
)
goto:eof

:2
echo 2
Rem Оптимизация JPEG (Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    jpegtran.exe -copy all -optimize "%%~fi" "%%~fi"
    jhead.exe -dc -de -di -dx -du "%%~fi"
)
goto:eof

:3
echo 2
Rem Оптимизация JPEG (Progressive vs. Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
    jpegtran.exe -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
    jpegtran.exe -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
    call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
    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
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 16:43
lorents

Цитата:
Я имел ввиду как получить путь, я просто не знаю где будет находится pngcrush.exe, я только знаю что в папке Docs, а папка Docs находится в той же папке что мой батник


Код: chcp 1251>nul
"%~dp0Docs\pngcrush.exe"
chcp 866>nul
Автор: lorents
Дата сообщения: 21.03.2010 17:20
mugil_cephalus
Смотрите мне надо, чтобы до вывода запроса на png, батник проверял, есть ли файлы png в папке Images, если да, то выводить запрос, если нет, то перейти к jpeg, и опять тоже самое

Высылаю Вам весь мой проект, чтобы было бы удобнее
http://webfile.ru/4373100
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 17:27
lorents

[more=на счет *.png-файлов, - так что ли? такой код? проверь.]


Код: @echo off
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do if /i "_%%~i" equ "_" goto:loop2

:loop1
echo [1] PNG Interlace - Noninterlaced
echo [2] PNG Interlace - Adam7

set /p png="Choose a task by number: "

if not defined png goto:eof
if %png%==1 goto:1
if %png%==2 goto:2
if /i "_%png%" neq "_1" if /i "_%png%" neq "_2" goto:loop1
goto:eof

:1
echo 1
Rem Оптимизация PNG (Interlace - Noninterlaced)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
call png.cmd "%%~fi"
pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
)
goto:eof

:2
echo 2
Rem Оптимизация PNG (Interlace - Adam7)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
optipng.exe -i1 "%%~fi"
pngcrush.exe -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
move /y "%%~dpni.tmp" "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
optipng.exe -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
advdef.exe -z -4 "%%~fi"
deflopt.exe "%%~fi"
)
goto:eof

:loop2
echo [1] JPEG - Progressive
echo [2] JPEG - Optimize
echo [3] JPEG - Progressive vs. Optimize

set /p jpeg="Choose a task by number: "

if not defined jpeg goto:eof
if %jpeg%==1 goto:1
if %jpeg%==2 goto:2
if %jpeg%==3 goto:3
if /i "_%jpeg%" neq "_1" if /i "_%jpeg%" neq "_2" if /i "_%jpeg%" neq "_3" goto:loop2
goto:eof

:1
echo 1
Rem Оптимизация JPEG (Progressive)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
jpegtran.exe -copy all -progressive "%%~fi" "%%~fi"
jhead.exe -dc -de -di -dx -du "%%~fi"
)
goto:eof

:2
echo 2
Rem Оптимизация JPEG (Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
jpegtran.exe -copy all -optimize "%%~fi" "%%~fi"
jhead.exe -dc -de -di -dx -du "%%~fi"
)
goto:eof

:3
echo 2
Rem Оптимизация JPEG (Progressive vs. Optimize)
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do (
jpegtran.exe -copy all -progressive "%%~fi" "%%~dpni_pro.tmp"
jpegtran.exe -copy all -optimize "%%~fi" "%%~dpni_opt.tmp"
call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
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
Автор: wolf0425
Дата сообщения: 21.03.2010 17:39

Цитата:

Цитата: напрмер, так - том:\путь\Docs\pngcrush.exe
Я имел ввиду как получить путь, я просто не знаю где будет находится pngcrush.exe, я только знаю что в папке Docs, а папка Docs находится в той же папке что мой батник
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 17:57
wolf0425

Цитата:
Ну если от папки с батником - то так:
"%~dp0Docs\pngcrush.exe"

а мое чем хуже?

Цитата:
Код:chcp 1251>nul
"%~dp0Docs\pngcrush.exe"
chcp 866>nul

http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=500#2

ладно, шучу
посм. - http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=480#6
Автор: lorents
Дата сообщения: 21.03.2010 18:07
mugil_cephalus

Цитата:
на счет *.png-файлов, - так что ли? такой код? проверь.

Все равно просит ввести значение для PNG, даже если папка Images вообще пустая
Автор: wolf0425
Дата сообщения: 21.03.2010 18:07

Цитата:
а мое чем хуже?
расскажи в каком раскладе chcp твоего варианта на что-то влияет.
А вообще - что-то не видел что эта страница есть когда писал.
где-то кэш не сбросился вовремя, что ли.
Автор: lorents
Дата сообщения: 21.03.2010 18:08

Код: "%~dp0Docs\pngcrush.exe"
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 18:09
wolf0425

Цитата:
расскажи в каком раскладе chcp твоего варианта на что-то влияет.

я просто не знаком с конкретной задачей lorents
Автор: lorents
Дата сообщения: 21.03.2010 18:10
Я Вас очень прошу, помочь мне с этим дело, оби тогда проект для оптимизации картинок будет готов, остается только добавить gif, по аналогу я уже смогу
Автор: wolf0425
Дата сообщения: 21.03.2010 18:11

Цитата:
то мой батник не запускается
в этой строке никакого запуска батника и не прописано.
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 18:11
wolf0425

Цитата:
А вообще - что-то не видел что эта страница есть когда писал.
где-то кэш не сбросился вовремя, что ли.

да это все мелочи; я шучу...
Автор: wolf0425
Дата сообщения: 21.03.2010 18:12

Цитата:
я просто не знаком с конкретной задачей lorents
да плевать какая у него задача - расскажи в какой задаче будет влиять. Зачем-то же ты две лишние строки вписал...
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 18:13
lorents
пробовал ? http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=502&limit=1&m=1#1

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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