Цитата amel27:
к слову, пример неудачной жертвы в угоду "универсальности"... просто интересно, где может быть полезна восьмеричная запись? »
|
уж не знаю, но что сделано - то сделано.
парочка моментов на тему автопреобразования типа данных:
1: намучался, пока отлаживал скрипт "напоминалки" - взбрело же в голову сделать фичу - если число задержки начинается с нуля - то это секунды, а иначе - минуты (ну когда 2 минуты - мало, а 3 - много

)
если интересно вот он:
читать дальше »
Код:

@Echo off
setlocal EnableExtensions
rem Запуск: TimerMsg [таймер] [Сообщение] * Сообщение не может начинаться с цифр, иначе будет воспринято как таймер
rem Кол-во сигналов (от 0)
set Beep=3
rem Таймер в минутах или в секундах по-дефолту, если цифра начинается с "0", например 030 - 30 секунд, 30 - 30 минут.
set Delay=5
rem Отображаемое сообщение по-дефолту
set Msg=Hurry Up!!!
set self="%~0"
if "%1"=="~" set Delay=%2 & set Msg=%~3 & goto L03
:L01
if "%1"=="" goto L02
set N=%1
if %N:~0,1%==0 set N=%N:~1%
set /a N+=0
if /i %N% gtr 0 (set Delay=%1) else set Msg=%~1
shift&goto L01
:L02
if /i %Delay:~0,1% gtr 0 (set /a Delay*=60) else set Delay=%Delay:~1%
if /i %Delay% GEQ 86400 (echo Нельзя указывать таймер более суток! &exit 1)
:L03
if /i %Delay% lss 60 (
ping 127.0.0.1 -n %Delay% 2>nul >nul
msg * /time:0 %Msg%
for /l %%n in (1,1,%Beep%) do echo &ping 127.0.0.1 -n 1 2>nul >nul
exit
)
set /a S=%Time:~0,2% * 3600 + %Time:~3,2% * 60 + %Time:~6,2% + %Delay%
if /i %S% GEQ 86400 set /a S-=86400
set /a H=%S%/3600
set /a M=(%S%-%H%*3600)/60
set /a S=%S%-%H%*3600-%M%*60
at %H%:%M% %ComSpec% /c start "" /low /min %self% ~ %S% "%Msg%"
2: Обход преобразования из восмеричной системы я сделал так (я использовал по 9 цифр для сложения) поскольку из 10го разряда мне главное не вылезти за цифру 1 (остальные 9 разрядов могут содержать любые цифры) и использовал его как раз для "переноса", то младшая часть получалась просто:
set /a Low=1%Src:~-9%-1000000000 - использовал так нелюбимое мной автопреобразование типа
А вот обработать лидирующий минус - не догадался, в результате было только сложение (ну оно мне и было нужно в конкретной задаче).