Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

Аватара для dvassilyev

Старожил


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

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


Доброго дня всем.

возникла небольшая загвоздка, нужно получить в переменную дату за минусом одного дня
типо такого echo %date% получим 31.05.2012, а мне нужно минус один день т.е. 30.05.2012 и вставить все это в путь \\server\30.05.2012

Спасибо

Отправлено: 11:08, 31-05-2012

 

Ветеран


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

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


Цитата CyberMuesli:
високосным является не год, который делится без остатка на 4 »
Я что-то не пойму. Например возьмем год 1900. Если тупо отнимать по 4 года с 2012, то 1900 попадает на високосный:
Код: Выделить весь код
 > for /l %i in (2012,-4,1900) do @echo %i
2012
2008
2004
2000
1996
1992
1988
1984
1980
1976
1972
1968
1964
1960
1956
1952
1948
1944
1940
1936
1932
1928
1924
1920
1916
1912
1908
1904
1900
Но если проверить:
Код: Выделить весь код
 > [datetime]::isleapyear("1900")
False
Код: Выделить весь код
for ( $i=2012; $i -ge 0; $i-- ) {

    if ( $($i%4) -eq 0 ) { 

        if ( !([datetime]::isleapyear($i)) ) { $i }

    }

}
Исходя из PowerShell ниже все не високосные, но делятся без остатка на 4
Цитата:
1900
1800
1700
1500
1400
1300
1100
1000
900
700
600
500
300
200
100
Или здесь не математика, а астрономия?

Отправлено: 20:22, 02-07-2012 | #11



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

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


Аватара для CyberMuesli

Старожил


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

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


Цитата Foreigner:
Цитата CyberMuesli:
високосным является не год, который делится без остатка на 4 »
Я что-то не пойму »
http://ru.wikipedia.org/wiki/%C2%E8%...B%E9_%E3%EE%E4


Код: Выделить весь код
    set /a Mod4=%%i   %% 4
    set /a Mod100=%%i %% 100
    set /a Mod400=%%i %% 400

    set IsLeapYear=No
    if !Mod400!==0 (
       set IsLeapYear=Yes
    ) else (
       if !Mod4!==0 (
           if not !Mod100!==0 (
              set IsLeapYear=Yes
           )
       )
    )

-------
Кибер Мюсли

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

Отправлено: 20:23, 02-07-2012 | #12


Ветеран


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

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


CyberMuesli,
Астрономия. Но для бекапов сойдет и x%y

Отправлено: 20:38, 02-07-2012 | #13


Аватара для CyberMuesli

Старожил


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

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


Цитата Foreigner:
Астрономия. Но для бекапов сойдет и x%y »
Для бэкапов сойдет и вообще без високосного. Пока он наступит - Вы уже уволились и перешли на другую работу.

-------
Кибер Мюсли


Отправлено: 14:22, 03-07-2012 | #14


Аватара для dvassilyev

Старожил


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

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


CyberMuesli, да и такое бывает

Отправлено: 13:22, 19-07-2012 | #15


Ветеран


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

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


Нужно создать переменные некоторого диапазона прошедших дней. Столкнулся с проблемой раскрытия в "tokens=!tok!" в цикле. Есть идеи?
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

for /l %%a in (5,1,9) do (

set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

if "!d:~0,1!"=="0" set d=!d:~1!
if "!m:~0,1!"=="0" set m=!m:~1!

set /a feb=y%%4
if "!feb!"=="0" (set feb=29) else (set feb=28)

set /a tok=m-1
if "!tok!"=="0" set tok=12

for /f "tokens=!tok!" %%i in ("31 !feb! 31 30 31 30 31 31 30 31 30 31") do (
   set /a d-=%%a
    if !d!==0 (
        set d=%%i
        set m=%tok%
        if !m!==12 set /a y-=1
    )
)

set d=0!d!
set m=0!m!
set yesterday=!d:~-2!.!m:~-2!.!y!

echo !yesterday!_%%a
)
pause

Отправлено: 08:20, 27-11-2014 | #16


Ветеран


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

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


Цитата sov44:
Столкнулся с проблемой раскрытия в "tokens=!tok!" в цикле. »
Там не должно быть «!Var!».

Цитата sov44:
Есть идеи? »
Использовать иной подход. Или вынести эту часть в отдельную процедуру. Значение «tok» передавайте в неё параметром.

Отправлено: 09:03, 27-11-2014 | #17


Ветеран


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

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


sov44, Вынести за пределы цикла?
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

for /l %%a in (5,1,9) do (

set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

if "!d:~0,1!"=="0" set d=!d:~1!
if "!m:~0,1!"=="0" set m=!m:~1!

set /a feb=y%%4
if "!feb!"=="0" (set feb=29) else (set feb=28)

set /a tok=m-1
if "!tok!"=="0" set tok=12

call:1 %%a

set d=0!d!
set m=0!m!
set yesterday=!d:~-2!.!m:~-2!.!y!

echo !yesterday!_%%a
)
pause

goto:eof

:1
for /f "tokens=%tok%" %%i in ("31 !feb! 31 30 31 30 31 31 30 31 30 31") do (
   set /a d-=%1
    if !d!==0 (
        set d=%%i
        set m=%tok%
        if !m!==12 set /a y-=1
    )
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:03, 27-11-2014 | #18


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


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

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


Нужно было вывести даты с шагом в 7 дней. На самом деле можно вычитать любое количество дней из даты и задавать любое количество шагов:
Так что не только текущая дата минус одна неделя.

Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set date=08.03.2021
set n=7
set m=20

echo.
echo Start:	%date%
echo Day:	-%n%
echo Step:	%m%
echo.

for /l %%i in (1,1,%m%) do (
call :date
)
pause > nul
exit

:date
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%

set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)

set /a tok=m-1
if %tok%==0 set tok=12
for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
   set /a d-=7
    if !d! LSS 0 (
        set /a d=%%i!d!
        set m=%tok%
        if !m!==12 set /a y-=1
    )
	if !d! EQU 0 (
        set d=%%i
        set m=%tok%
        if !m!==12 set /a y-=1
	)
)
set d=0%d%
set m=0%m%
set date=%d:~-2%.%m:~-2%.%y%

echo %date%
exit /b

Отправлено: 18:14, 29-09-2021 | #19


Ветеран


Contributor


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

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


vladobro87, В чем новизна? 11 лет тому назад здесь было сделано.
Здесь этот код применён в слегка модифицированном виде - процедура, ИМХО, более удобна в применении и увеличина надёжность.

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

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

Отправлено: 19:19, 29-09-2021 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Текущая дата в пути к файлу AlexVong Скриптовые языки администрирования Windows 3 18-11-2011 00:43
Обновленные Apple MacBook Pro: минус SSD, плюс Thunderbolt OSZone News Новости железа 0 24-02-2011 20:30
Интернет празднует еще один день рождения OSZone News Новости информационных технологий 0 01-11-2009 16:30
"День 7" - на носу: Windows 7 осталось ждать один день OSZone News Новости и события Microsoft 0 21-10-2009 12:30
Вопрос по лицензированию w2k3 (просрочил один день) mark4ever Microsoft Windows NT/2000/2003 6 31-05-2006 08:50




 
Переход