информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / sysadmin
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Тады вот такой батничик для начала: [upd4] 04.10.05 20:33  Число просмотров: 13444
Автор: Den <Denis> Статус: The Elderman
Отредактировано 05.10.05 13:29  Количество правок: 9
<"чистая" ссылка>
Скриптец позволяет расчитать дату по дельте дней от указанной даты и возвращает результат формата YYYYMMDD в стандартный вывод.
Например, при стандарте РФ в представлении даты системы, для получения даты на 183 дня (примерно полгода) раньше текущей надо делать так (в bat файле):

for /F "tokens=* " %%i in ('calcdate.bat "dd DD.MM.YYYY" "%date%" -183') do set $date=%%i
set year=%$date:~0,4%
set month=%$date:~4,2%
set day=%$date:~-2%
rem Результат
echo YYYY=%year%; MM=%month%; DD=%day%

---
Все параметры для calcdate.bat, кроме дельты, обязательно указывать в двойных кавычках.
С перемещением каталогов додумаю потом (я на работе все-таки), а пока вот вам новая "игрушка":


@echo off
rem ---------- calcdate.bat ----------
rem --- Written by Den[bugtraq.ru] ---
rem ----------------------------------
rem Enter: %1 - Формат передающейся даты в двойных кавычках: DD, MM, YYYY в любой последовательности с любыми разделителями. Пример: "dd DD-MM-YYYY", dd используются для пропускания дней недели.
rem %2 - Дата в двойных кавычках указанного в %1 формата
rem %3 - Дельта со знаком. Примеры: -180, +3
rem Exit: В стандартном выходе расчетная дата формата YYYYMMDD
setlocal
set $date=%~2
call :getpos YYYY "%~1"
if defined $pos (call set year=%%$date:~%$pos%,4%%) else goto :EOF
call :getpos MM "%~1"
if defined $pos (call set month=%%$date:~%$pos%,2%%) else goto :EOF
call :getpos DD "%~1"
if defined $pos (call set day=%%$date:~%$pos%,2%%) else goto :EOF
rem Отбрасываем признак восьмеричного числа.
for /F "tokens=* delims=0" %%i in ("%day%") do set /a daycount=%%i
for /F "tokens=* delims=0" %%i in ("%year%") do set /a year=%%i
for /F "tokens=* delims=0" %%i in ("%month%") do set /a month=%%i
rem Кол-во високосных
set /a i=(%year%-1)/4
rem Текущий после високосного, если j==4, то идет високосный
set /a j=%year%-%i%*4
rem Кол-во дней в полных годах до текущего
set /a daycount+=%i%*1461+(%j%-1)*365
set /a i=%month%

:loop
set /a i-=1
if %i%==0 goto :next
if %i%==1 set /a daycount+=31
if %i%==2 (if %j%==4 (set /a daycount+=29) else set /a daycount+=28)
if %i%==3 set /a daycount+=31
if %i%==4 set /a daycount+=30
if %i%==5 set /a daycount+=31
if %i%==6 set /a daycount+=30
if %i%==7 set /a daycount+=31
if %i%==8 set /a daycount+=31
if %i%==9 set /a daycount+=30
if %i%==10 set /a daycount+=31
if %i%==11 set /a daycount+=30
if %i%==12 set /a daycount+=31
goto :loop

:next
rem Days after christmas: %daycount%
set /a daycount+=%3
rem Result=%daycount%
set /a i=%daycount%/1461
set /a j=%daycount%-%i%*1461
if %j%==0 set /a i-=1
set /a daycount-=%i%*1461
set /a year=%i%*4
set /a i=%daycount%/365
if %j%==0 set /a i-=1
set /a j=%daycount%-%i%*365
if %j%==0 set /a i-=1
set /a daycount-=i*365
set /a i+=1
set /a year+=%i%
set /a j=%daycount%
set /a month=1

:loop_1
if %month%==1 set /a j-=31
if %month%==2 (if %i%==4 (set /a j-=29) else set /a j-=28)
if %month%==3 set /a j-=31
if %month%==4 set /a j-=30
if %month%==5 set /a j-=31
if %month%==6 set /a j-=30
if %month%==7 set /a j-=31
if %month%==8 set /a j-=31
if %month%==9 set /a j-=30
if %month%==10 set /a j-=31
if %month%==11 set /a j-=30
if %month%==12 set /a j-=31
if %j% LEQ 0 goto :next_1
set /a month+=1
set /a daycount=%j%
goto :loop_1

:next_1
set lz=0000
call :getlen "%year%"
set /a $len=4-%$len%
if not %$len%==0 call set year=%%lz:~-%$len%%%%year%
call :getlen "%month%"
set /a $len=2-%$len%
if not %$len%==0 call set month=%%lz:~-%$len%%%%month%
set /a days=%daycount%
call :getlen "%days%"
set /a $len=2-%$len%
if not %$len%==0 call call set days=%%lz:~-%$len%%%%days%
echo %year%%month%%days%
endlocal
goto :EOF


:getlen
rem Enter: %1 - Строка в двойных кавычках
rem Exit: $len - Длина строки без учета двойных кавычек
set par=%~1
set /a i=0
set $len=

:getlen_loop
call :getlen_1 "%%par:~%i%,1%%"
if defined $len goto :EOF
set /a i+=1
goto :getlen_loop

:getlen_1
if %1=="" set /a $len=%i%
goto :EOF

:getpos
rem Enter: %1 - Искомая строка в двойных кавычках
rem %2 - Строка-источник в двойных кавычках
rem Exit: $pos - Позиция искомой строки в строке-источнике без учета двойных кавычек.
call :getlen "%~1"
set /a $findlen=%$len%

call :getlen "%~2"
set /a $formatlen=%$len%-1
set par=%~2
set /a i=0
set $pos=

:getpos_loop
call :getpos_1 %i% "%~1" "%%par:~%i%,%$findlen%%%"
if defined $pos goto :EOF
if %i%==%$formatlen% goto :EOF
set /a i+=1
goto :getpos_loop

:getpos_1
if %2==%3 set /a $pos=%i%
goto :EOF
rem ---------- END calcdate.bat ----------

---
<sysadmin> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach