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

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

Автор: lorents
Дата сообщения: 21.03.2010 18:14
mugil_cephalus
Да, я как раз скопировал код, и удалил все ненужные пробелы

Добавлено:

Цитата:
в этой строке никакого запуска батника и не прописано.

да нет, я про другое, уже понял где ошибся, Извиняюсь
Все работает кроме

Код: call "%~dp0Docs\png.cmd" "%%~fi"
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 18:20
wolf0425

Цитата:
да плевать какая у него задача - расскажи в какой задаче будет влиять. Зачем-то же ты две лишние строки вписал...

если "%~dp0Docs\pngcrush.exe" раскроется в c:\кириллица\Docs\pngcrush.exe
Автор: wolf0425
Дата сообщения: 21.03.2010 18:22

Цитата:
Не знаю почему
а чего у тебя - батники в разных каталогах лежат?
.\ и .\Docs ???
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 18:23
lorents

Цитата:
Да, я как раз скопировал код, и удалил все ненужные пробелы

ну и раьотает
Цитата:
mugil_cephalus
Смотрите мне надо, чтобы до вывода запроса на png, батник проверял, есть ли файлы png в папке Images, если да, то выводить запрос, если нет, то перейти к jpeg, и опять тоже самое

??

Добавлено:
lorents
a loop'ы - loop1 и loop2 исправил?

Добавлено:
lorents

Цитата:
Код:@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: "

после проверки *.png, если png нет, скрипт переходит на loop2 - к jpeg'am
Автор: wolf0425
Дата сообщения: 21.03.2010 18:29

Цитата:
раскроется в c:\кириллица\Docs\pngcrush.exe

раскроется в той кодовой странице, с которой работал смд в момент выполнения строки запуска, она же нужна для запуска. разницы не будет.

вот если в символах пути есть «» - то разница будет, да
но кроме 1251-only символов бывают и OEM-only, заранее не угадаешь
Автор: lorents
Дата сообщения: 21.03.2010 18:29
wolf0425

Цитата:
а чего у тебя - батники в разных каталогах лежат?

потому что он выступает как некая программа отдельная

Добавлено:

Цитата:
после проверки *.png, если png нет, скрипт переходит на loop2 - к jpeg'am

Смотрите как я сделал
http://webfile.ru/4373252
Автор: mugil_cephalus
Дата сообщения: 21.03.2010 19:03
wolf0425
сравни
1)

Код: mode con cols=80 lines=25
title %~n0
chcp
chcp 1251>nul
cd /d "F:\Documents and Settings\admin\Избранное"
chcp
chcp 866>nul
ver
pause
Автор: wolf0425
Дата сообщения: 21.03.2010 19:38

Цитата:
сравни

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


Добавлено:

Цитата:
поясню: сравни результат визуализации в консоли команды ver в обоих случаях
сравнил, в обоих случаях одинаковые английские буквы. что дальше?

на тебе для раздумья
Автор: lorents
Дата сообщения: 21.03.2010 19:57
Объясните пожалуйста

[more]
Код: Rem 21/03/2010
@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 "%~dp0Docs\png.cmd" "%%~fi"
    "%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\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 (
    "%~dp0Docs\optipng.exe" -i1 "%%~fi"
    "%~dp0Docs\pngcrush.exe" -rem alla -brute -reduce "%%~fi" "%%~dpni.tmp"
    move /y "%%~dpni.tmp" "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    "%~dp0Docs\advdef.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
)
goto:eof

for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg') do if /i "_%%~i" equ "_" goto:loop3

: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 (
    "%~dp0Docs\jpegtran.exe" -copy all -progressive "%%~fi" "%%~fi"
    "%~dp0Docs\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 (
    "%~dp0Docs\jpegtran.exe" -copy all -optimize "%%~fi" "%%~fi"
    "%~dp0Docs\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 (
    "%~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
Автор: yurkesha
Дата сообщения: 21.03.2010 20:06
wolf0425

Цитата:
че сравнивать то - руки выпрями сначала
и научись имя в команду вставлять в той кодировке, в которой батник команду исполняет.
По приведенным скринам в обоих ситуациях произошла смена директории - значит имя написано правильно.

Цитата:
сравнил, в обоих случаях одинаковые английские буквы. что дальше?
английские - одинаковы, а русские? Конкретно слово Версия...

А все потому что chcp меняет отображаемую кодировку у всего сеанса...
Автор: wolf0425
Дата сообщения: 21.03.2010 22:17

Цитата:
А все потому что chcp меняет отображаемую кодировку у всего сеанса...
что ты называешь всем сеансом то?
на отображение результата уже выполненных команды chcp не влияет никак - отображение консоли у меня вообще работает в 1200 кодировке независимо от chcp. Уникод форева... chcp только объясняет из какой страницы фонта брать символы при выводе и в какой кодировке работает передача аргументов. всё.

Автор: yurkesha
Дата сообщения: 21.03.2010 23:30
wolf0425
Ты ошибся со скриншотом... Посмотри еще раз внимательнее. И "наехал" на человека по ошибке...

Добавлено:
А то что я ошибся - признаю - по крайней мере я ни на кого со своей ошибкой не наехал...
Есть просто утилиты которые возвращают свой вывод всегда в CP866...

Добавлено:
И кстати отрабатывать это может по разному из скрипта и просто набранное в консоли...
Автор: king_stiven
Дата сообщения: 22.03.2010 00:06
lorents
Извини, сил нет всю простынку изучать. Лучше б ты из неё кусочки надёргал где не получается и ещё жирным шрифтом выделил

Цитата:
если в папке Images нет соответсвующих файлов, то запрос не должен выводится). а у меня все равно выводится

Так ищется в папке Images или ещё и в подпапках её тоже? Если без подпапок то

Код: if not exist "Images\*.png" echo фалов нет
Автор: wolf0425
Дата сообщения: 22.03.2010 00:07

Цитата:
Ты ошибся со скриншотом...
c чьим? Вся серия скриншотов началась с того, что человек ставил chcp 1251 перед "%~dp0Docs\pngcrush.exe" с обоснованием что в 866 кодировке там неправильно раскроются русские буквы в пути.
после этого начали друг друга лечить
Автор: king_stiven
Дата сообщения: 22.03.2010 00:13
call "%~dp0Docs\png.cmd"
может расширение писать bat? Для cmd есть какие то заморочки.
Автор: yurkesha
Дата сообщения: 22.03.2010 00:17
wolf0425
Цитата:
че сравнивать то - руки выпрями сначала
и научись имя в команду вставлять в той кодировке, в которой батник команду исполняет.
твои слова? Скрины перед этим твоим постом не очень вежливым... Я понимаю что трудно извиниться перед человеком(не в твоих правилах), но может все-таки? mugil_cephalus совсем не заслужил оскорбления в той ситуации...
А я так мимо - проходил Уже прошел дальше...

Автор: wolf0425
Дата сообщения: 22.03.2010 00:28

Цитата:
может расширение писать bat? Для cmd есть какие то заморочки.
совершенно никакой разницы какое расширение писать в данном случае.
вся разница между расширениями - как отрабатываются некоторые команды внутри, и заморочки - это как раз у бат.



Добавлено:

Цитата:
твои слова? Скрины перед этим твоим постом не очень вежливым..

мои. и скрины - таки являются иллюстрацией кривизны рук:
с прямыми руками - ни команда cd ни команда ver никаких кракозябр не выдают, почему-то:

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


Цитата:
А я так мимо - проходил Уже прошел дальше...
вот и ходи мимо.
Автор: mugil_cephalus
Дата сообщения: 22.03.2010 08:47
wolf0425
1) оба кода от http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=520#2 имеют единственное различие в скрипте (красная помета) - REM
2) для обоих кодов - режим command-line batch mode
3) причины повторной инверсии - chcp 866 - тебе объяснил yurkesha

Цитата:
английские - одинаковы, а русские? Конкретно слово Версия...

4а) про причину первой смены кодировки - chcp 1251 - я думал ты понял, так как я еще раньше написал об этом пост -
Цитата:
если "%~dp0Docs\pngcrush.exe" раскроется в c:\кириллица\Docs\pngcrush.exe
- http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=500#17
4б) привожу повторный пример:
у этого скрипта тоже только единственное различие (выделено)


Код: mode con cols=80 lines=25
title %~n0
chcp
REM chcp 1251>nul
cd /d "F:\Documents and Settings\admin\Избранное"
chcp
chcp 866>nul
ver
pause
Автор: lorents
Дата сообщения: 22.03.2010 11:03
king_stiven

Цитата:
Так ищется в папке Images или ещё и в подпапках её тоже? Если без подпапок то

здесь все правильно

Цитата:
call "%~dp0Docs\png.cmd"

проблема именно в этой строке, почему не понимаю

Цитата:
может расширение писать bat? Для cmd есть какие то заморочки.

попробовал, тот же результат.

Цитата:
а вот это неправильно

а как правильно?

mugil_cephalus

Цитата:
может в твоем большом коде где-то надо "%~dp0Docs\pngcrush.exe" , а где-то - "%~dp1Docs\pngcrush.exe" ??

не вышло, если отключить эту строку то цикл работает

смотрите, если png.bat прописать так

Код: @echo off
"%~dp0Docs\optipng.exe" -i0 -zc1-9 -zm1-9 -zs0-3 -f0-5 %1 > "%~dp0Docs\png.log" || exit 1
for /f "delims==,IDAT tokens=5" %%i in ("%~dp0Docs\png.log") do (
    set f=%%i
)
set f=%f:~1,1%
del "%~dp0Docs\png.log"
"%~dp0Docs\pngout.exe" /k0 /n /f%f% %1 || exit 3
Автор: king_stiven
Дата сообщения: 22.03.2010 11:48
lorents

Цитата:
а как правильно?


Цитата:
Если без подпапок то

Код:if not exist "Images\*.png" echo фалов нет

вот так правильно

Добавлено:

Цитата:
кот тестил, - он не отрабатывает; а где ошибка?

данный код подразумевает: что только если есть хоть одна переменная Images\*.png , то выполняется команда
do if /i "_%%~i" equ "_" goto:loop2
Предположим есть Images\*.png , тогда
if /i "_%%~i" equ "_"
никогда выполняться не будет
а если нет ни одной переменной Images\*.png, то команда
do if /i "_%%~i" equ "_" goto:loop2
как и любая другая команда тем более выполняться не будет, так как нет ни одной переменной
lorents
при запуске кода в чёрном окошечке выделяй и копируй сюда. какие ошибки пишет. трудно быть телепатом.
Автор: dronxumuk
Дата сообщения: 22.03.2010 13:40
Люди, еще с одной проблемой столкнулся. Нужно скопировать из одной папки в другую некоторые файлы. Отбор идет по имени.

через robocopy сделал, но на хрюше сия команда не идет.
через for не догоняю как сделать. В хелпе мало информации(((

Подсобите, а?
Автор: king_stiven
Дата сообщения: 22.03.2010 16:14
dronxumuk
распиши подробнее
Автор: wolf0425
Дата сообщения: 22.03.2010 16:18

Цитата:
3) причины повторной инверсии - chcp 866 - тебе объяснил yurkesha
не объяснил, а объяснял, причем неверно.
Специально чтоб показать что руки кривые - я привел скриншот где кракозябр вообще нет, всё раскрываеться правильно (на эту тему вообще 3 скриншота), команды - те же самые.
научись делать скриншоты помельче, кстати, задрал своей гигантоманией.

Цитата:
1) оба кода от имеют единственное различие в скрипте (красная помета) - REM

И оба кода не имеют никакого отношения к тому как отработает вызов "%~dp0Docs\pngcrush.exe".
просто совсем никакого.


Цитата:
4а) про причину первой смены кодировки - chcp 1251 - я думал ты понял, так как я еще раньше написал об этом пост -
я понял что ты совершенно не понимашь зачем нужна эта команда, и выше тебе это писал уже вроде. с картинками.


Цитата:
4б) привожу повторный пример:
у этого скрипта тоже только единственное различие (выделено)
а ты сам то видишь что у тебя в примере на этом новом скриншоте - cd не срабатывает из-за несовпадения кодировки батника и текущей кодовой страницы?
Автор: dronxumuk
Дата сообщения: 22.03.2010 16:35
king_stiven

в файле конфигурации устанавливаем переменные:

Код:
rem Здесь вы перечисляете наименования обновляемых ИБ через пробел

set Baselist=quest pap law

rem Здесь вы указываете путь к устройству чтения дисков или флэшке

set StorageANS=F:\_пополнение\

rem Здесь вы указываете путь к папке Consultant:

set Consultant=d:\consultant\
Автор: wolf0425
Дата сообщения: 22.03.2010 16:35
dronxumuk
Цитата:
через robocopy сделал, но на хрюше сия команда не идет.
что значит не идет? замечательно идет - robocopy сначала скопируй куда надо.

Добавлено:

Цитата:
нужно заставить машину копировать файлы с именами %Baselist% из дирректории %StorageANS% в дирректорию %Consultant%receive

Код: for %%a in ( %Baselist% ) do copy /b "%StorageANS%%%a" "%Consultant%receive\*"
Автор: dronxumuk
Дата сообщения: 22.03.2010 16:47

Цитата:

Код: for %%a in ( %Baselist% ) do copy /b "%StorageANS%%%a" "%Consultant%receive\*"
Автор: StarkCh
Дата сообщения: 22.03.2010 16:55
Доброго времени суток!
Необходимо переименовать файлы, созданные по маске ГГГГ-ММ-ДД_ЧЧММСС-filename.jpg
(2010-03-22_165800-IMGP2524.jpg к примеру)
путем прибавления (убавления) определенного числа (к примеру прибавить 1 час 10 минут - получится 2010-03-22_180800-IMGP2524.jpg).

Подскажите как это сделать?
Автор: king_stiven
Дата сообщения: 22.03.2010 18:29
StarkCh
Очень много возни, разбивка числа на часы минуты секунды, складывание, учитывание 60 минут, учитывание дат, короче может кто другой знает полегче. И в шапке всё внимательно посмотри, там есть примеры с датами через VBS скрипты.
Автор: mugil_cephalus
Дата сообщения: 22.03.2010 19:13
wolf0425

Цитата:
не объяснил, а объяснял, причем неверно.
Специально чтоб показать что руки кривые - я привел скриншот где кракозябр вообще нет, всё раскрываеться правильно (на эту тему вообще 3 скриншота), команды - те же самые.
научись делать скриншоты помельче, кстати, задрал своей гигантоманией.

где у меня на втором скриншоте "версия" без кракозябр?

Цитата:
И оба кода не имеют никакого отношения к тому как отработает вызов "%~dp0Docs\pngcrush.exe".
просто совсем никакого.

да не имеют, их цель - демонстрация слова "версия" кракозябрами

Цитата:
а ты сам то видишь что у тебя в примере на этом новом скриншоте - cd не срабатывает из-за несовпадения кодировки батника и текущей кодовой страницы?

я это и пытаюсь тебе объяснить, - что если первый раз не менять кодировку на 1251, то команда cd не срабатывает
p.s.
резюме
1) первый раз меняем кодировку на 1251, чтобы сраьотало cd
2) второй раз производим инверсию на 866 - чтобы слово "версия" и все прочее визуализировалось в консоли без кракозябр
Автор: wolf0425
Дата сообщения: 22.03.2010 20:25

Цитата:
я это и пытаюсь тебе объяснить, - что если первый раз не менять кодировку на 1251, то команда cd не срабатывает
она не срабатывает только если имя каталога указывать в неправильной кодировке - что делать никто не заставляет. на предыдущей странице минимум один скриншотов с примером как команда cd замечательно срабатывает без команды cp 1251.
в команде "%~dp0Docs\pngcrush.exe". кодировка буковок по определению правильная - её подставляет сам cmd в соответствии с cp, и проблемы могут быть только если символы имени пути не имеют однозначного соответствия в текущей кодировке. Но на такие случаи и cp 1251 ничуть не панацея - имя то может попасться хоть иероглифами.


Цитата:
где у меня на втором скриншоте "версия" без кракозябр?
достаточно что кракозябры вообще на скриншоте есть.

Цитата:
да не имеют, их цель - демонстрация слова "версия" кракозябрами

на предыдущей странице также есть скриншот, где слово "версия" выдано той же программой без кракозябр и в 866 и в 1251 кодировках, подряд.
так что кракозябры, заморочки с лишними переключениями кодировки, и проблемы с руками - таки коррелируют.



Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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