Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен счётчик с лидирующими нулями

Ответить
Настройки темы
CMD/BAT - [решено] Нужен счётчик с лидирующими нулями

Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, я делаю ватермарки на gif изображения.
Код выглядит так:
Код: Выделить весь код
REM ### PROCCESS ANIMATION START  ###
set FileNumbA=0
for %%e in ("%SequenceFolder%/*.png") do ( set /a FileNumbA+=1 )
echo Number files in directory %FileNumbA%
REM ### PROCCESS ANIMATION START  ###
setlocal enableextensions enabledelayedexpansion
set /a "FrameNumber=01"
for %%f in ( "%SequenceFolder%\*.png" ) do (
.\..\bin\magick -size 100x14 xc:none -gravity center ^
          -stroke black -strokewidth 2 -annotate 0 "!FrameNumber! of %FileNumbA%" ^
          -background none -shadow 100x3+0+0 +repage ^
          -stroke none -fill white     -annotate 0 "!FrameNumber! of %FileNumbA%" ^
          %%f  +swap -gravity southwest -geometry +0-3 ^
          -composite  .\img\1seq\%%~nxf 
set /a "FrameNumber+=01"		  
)
REM ### PROCCESS ANIMATION START  ###
for %%g in ( ".\img\1seq\*.png" ) do (
.\..\bin\magick -size 100x14 xc:none -gravity center ^
          -stroke black -strokewidth 2 -annotate 0 "%WatermarkText%" ^
          -background none -shadow 100x3+0+0 +repage ^
          -stroke none -fill white     -annotate 0 "%WatermarkText%" ^
          %%g  +swap -gravity southeast -geometry +0-3 ^
          -composite  .\img\2seq\%%~nxg )
Логика следующая: берём папку в которой лежат картинки.png
Считаем общее количество картинок
и начинаем на каждую по очереди наносить ватермарк.
В конце серию картинок преобразуем в gif.
Выглядит примерно так:

Как можно видеть, слева при переходе с 9 до 10 изображение прыгает туда-сюда.
Был бы рад подсказке как сделать что бы переменная !FrameNumber! предварялась нулём
если в папке менее 100 изображений и двумя нулями если изображений более 100.
то есть 01 / 02 / 03 и т.д.
и 001 / 002 / 003 и т.д.

Отправлено: 16:37, 27-12-2016

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 3) do set/a FrameNumbe+=1& set "m=00!FrameNumbe!"& set "FrameNumbe=!m:~-3!"& echo !FrameNumbe!
pause
просто пример, прикручивайте сами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:55, 27-12-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


alpap, спасибо но по моему это не работает.
Смотрите я поменял 3 на 12
Код: Выделить весь код
echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 12) do set/a FrameNumbe+=1& set "m=00!FrameNumbe!"& set "FrameNumbe=!m:~-3!"& echo !FrameNumbe!
pause
и запустил:
Код: Выделить весь код
001
002
003
004
005
006
007
008
001
002
003
004
счётчик считает до восьми и потом обнуляется.
и главное я вроде все команды понимаю а результат непредсказуем.

Отправлено: 18:30, 27-12-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата hp1nt0:
и главное я вроде все команды понимаю а результат непредсказуем. »
Для командного процессора числа, начинающиеся с «0», являются восьмеричными . Не оно (в коде не разбирался)? Не оно, 8 — уже не оно.

hp1nt0, упакуйте исходники картинок и watermark в архив, и выложите на Яндекс.Диск или RGhost, дабы было с чем «играться».
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:41, 27-12-2016 | #4


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, уже заливаю. Только одно но, я работаю с множеством проектов одновременно
поэтому у меня всё в одной папке включая исполняемые файлы (hard links. you know ).
Преимущество в том что можно не заморачиваться с инструкциями по установке софта.
Минус в размере "дистрибутива". Я архивировал в рар5 и получилось 10мб. Вроде не много.
Запустите единственный батник. Появится окно выбора папки. Надо выбрать папку OriginalDumpedFrames расположенную рядом с батничком.
Остальное может быть по умолчанию.
http://rgho.st/8lPcRzxCD
ЗЫ: Так как я копировал куски кода не проверяя то надо подкорректировать пути к magick
вместо
Код: Выделить весь код
.\..\bin\magick
надо
Код: Выделить весь код
.\bin\magick

Последний раз редактировалось hp1nt0, 27-12-2016 в 19:23. Причина: некорректный код


Отправлено: 19:16, 27-12-2016 | #5


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я нашёл пост
http://stackoverflow.com/questions/1...s-batch-script
где человек решил подобную проблему. В сущности нужно IF
Код: Выделить весь код
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
Только я не понимаю что с чем он сравнивает.

Отправлено: 20:06, 27-12-2016 | #6


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


hp1nt0, Я не вчитывался в Ваш код, но для счетчика с лидирующими нулями я делаю такую махинацию:
считаю не от 1 до N c шагом 1, а, например, от 1000001 до N+1000000 c шагом 1, а потом отрезаю лишние начальные позиции. Встроить этот счетчик к Вам в задачу не брался, не люблю копаться в чужих кодах.
Код: Выделить весь код
@Echo Off
cls

SetLocal EnableExtensions EnableDelayedExpansion

FOR /L %%i IN (1000001,1,1000012) DO Set "i00=%%i" &Echo !i00:~4,9999!
pause

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:54, 27-12-2016 | #7


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, спасибо. Это отличный способ.
Я "поиграюсь", посмотрю как применить.

Отправлено: 00:21, 28-12-2016 | #8


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата hp1nt0:
но по моему это не работает »
все работает, переменная %FrameNumbe% уже записана в %m% и оперировать надо уже ей не переназначая иначе ее надо переоткрывать. Вот для 12ти:
Код: Выделить весь код
echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 12) do set/a FrameNumbe+=1& set "m=00!FrameNumbe!"& echo !m:~-3!
pause
или то же самое, если привычнее уже свою переменную наблюдать на выходе:
Код: Выделить весь код
echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 12) do set/a n+=1& set "FrameNumbe=00!n!"& echo !FrameNumbe:~-3!
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:17, 28-12-2016 | #9


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Угу. 1) считаем, 2) приписываем перед переменной потребное количество нулей, 3) вырезаем потребное количество разрядов справа.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:52, 28-12-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен счётчик с лидирующими нулями

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
нужен счётчик на сайт на.. oIo_DeN_oIo Вебмастеру 3 05-12-2007 01:22
Счётчик производительности *Processor* -MAXX- Автоматическая установка Windows 2000/XP/2003 9 03-10-2006 15:59
Счётчик на ярлычок MrGreeN Microsoft Windows 95/98/Me (архив) 3 15-10-2003 17:16
Счётчик - как сделать? diter Вебмастеру 5 03-10-2003 17:05
Счётчик посещений Evita Вебмастеру 13 27-08-2002 13:59




 
Переход