dvassilyev |
31-05-2012 11:08 1925460 |
текущая дата минус один день.
Доброго дня всем.
возникла небольшая загвоздка, нужно получить в переменную дату за минусом одного дня
типо такого echo %date% получим 31.05.2012, а мне нужно минус один день т.е. 30.05.2012 и вставить все это в путь \\server\30.05.2012
Спасибо
|
dvassilyev |
01-06-2012 09:33 1925906 |
нашел вот такой батник немного переделал, все работало, сегодня получил дату 0.6.2012 :) не много не то :)
for /f "tokens=1,2* delims=." %%I in ('echo %date%') do set /a day=%%I& set /a mon=%%J& set /a year=%%K
set /a day-=1
md c:\%day%.%mon%.%year%
|
Цитата:
Цитата dvassilyev
сегодня получил дату 0.6.2012 »
|
:lol:
Попробуйте так:
Код:
@echo off
setlocal enabledelayedexpansion
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 (
:: минус 1 день set /a d-=1
set /a d-=1
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%
pause
|
dvassilyev |
02-07-2012 11:05 1944223 |
все ок, робит отлично :)
Спасибо большое
|
CyberMuesli |
02-07-2012 18:01 1944446 |
високосным является не год, который делится без остатка на 4, а тот, который делится на 4, кроме тех, которые делятся на 100, но не делятся на 400
|
CyberMuesli, народ так далеко не заглядывает, а 2000-й удачно пришёлся на указанное исключение.
|
CyberMuesli |
02-07-2012 18:29 1944475 |
Цитата:
Цитата Iska
народ так далеко не заглядывает »
|
а почему серым цветом и маленькими буквами?
|
Потому что я написал оффтопиком своё мнение.
|
CyberMuesli |
02-07-2012 19:23 1944518 |
Цитата:
Цитата Iska
Потому что я написал оффтопиком своё мнение »
|
всё по теме
|
Цитата:
Цитата 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
|
Или здесь не математика, а астрономия?
|
CyberMuesli |
02-07-2012 20:23 1944559 |
Цитата:
Цитата 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
)
)
)
|
CyberMuesli,
Астрономия. Но для бекапов сойдет и x%y
|
CyberMuesli |
03-07-2012 14:22 1944960 |
Цитата:
Цитата Foreigner
Астрономия. Но для бекапов сойдет и x%y »
|
Для бэкапов сойдет и вообще без високосного. Пока он наступит - Вы уже уволились и перешли на другую работу.
|
dvassilyev |
19-07-2012 13:22 1954800 |
CyberMuesli, да и такое бывает
|
Нужно создать переменные некоторого диапазона прошедших дней. Столкнулся с проблемой раскрытия в "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
|
Цитата:
Цитата sov44
Столкнулся с проблемой раскрытия в "tokens=!tok!" в цикле. »
|
Там не должно быть «!Var!».
Использовать иной подход. Или вынести эту часть в отдельную процедуру. Значение «tok» передавайте в неё параметром.
|
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
)
)
|
vladobro87 |
29-09-2021 18:14 2967797 |
Нужно было вывести даты с шагом в 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
|
Время: 20:27.
© OSzone.net 2001-