[ОТВЕТИТЬ]
08.08.2007 12:12
OlegON
 
Вот ломаю голову, у меня батничек выводит дату в файл, который я потом отправляю по почте. В этом файле данные за предыдущие сутки. Можно ли как-то в cmd вывести предыдущую дату? Пока так, т.е. текущую
Цитата:
date /t>rep.txt
08.08.2007 17:48
Pyatak
 
Напиши свою консольную утилитку, которая будет вчерашнюю дату выводить. Это ж две минуты займет. Стандартными средствами вроде никак.
08.08.2007 18:36
OlegON
 
Цитата:
Pyatak Напиши свою консольную утилитку, которая будет вчерашнюю дату выводить. Это ж две минуты займет. Стандартными средствами вроде никак.
Да я в базу залез и селектом выдрал :) но некрасиво. Думаю, что можно, только не соображу как.
08.08.2007 18:54
student
 
Цитата:
OlegON Да я в базу залез и селектом выдрал :) но некрасиво. Думаю, что можно, только не соображу как.
vbs случаем не подойдет?

файл 2.vbs
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.CreateTextFile("rep.txt")
TextStream.Write(DateAdd("d",-1,DATE))
TextStream.Close
Set FSO = Nothing
WScript.Quit

файл 1.cmd
wscript.exe 2.vbs

запускаем 1.cmd и получаем в rep.txt
07/08/2007 - значение если не устраивает можно format -ом подправить
08.08.2007 20:03
OlegON
 
Да, увы, похоже, что кроме как сторонних стредств, тут ничего не придумать.. Даже если разбить на числа, то такой скриптище надо будет написать на числа месяца и високосные года... Вот, для затравки, возможности cmd:
Цитата:
@echo off&SETLOCAL

:: This will return date into environment vars
:: Works on any NT/2K/XP machine independent of regional date settings
:: 20 March 2002

FOR /f "tokens=1-4 delims=/-. " %%G IN ('date /t') DO (call :s_fixdate %%G %%H %%I %%J)
goto :s_print_the_date

:s_fixdate
if "%1:~0,1%" GTR "9" shift
FOR /f "skip=1 tokens=2-4 delims=(-)" %%G IN ('echo.^|date') DO (
set %%G=%1&set %%H=%2&set %%I=%3)
goto :eof

:s_print_the_date
echo Month:[%mm%] Day:[%dd%] Year:[%yy%]
ENDLOCAL&SET mm=%mm%&SET dd=%dd%&SET yy=%yy%
08.08.2007 21:52
Sullen
 
Поддерживаю вариант с WScript (или Cscript), дешево и сердито.
Тем более WScript можно рассматривать как расширение Cmd в некотором роде.
09.08.2007 09:04
student
 
Цитата:
Sullen Поддерживаю вариант с WScript (или Cscript), дешево и сердито.
Тем более WScript можно рассматривать как расширение Cmd в некотором роде.
На vbs можно полноценный cmd написать *12
09.08.2007 09:06
student
 
Цитата:
Sullen Поддерживаю вариант с WScript (или Cscript), дешево и сердито.
Тем более WScript можно рассматривать как расширение Cmd в некотором роде.
На vbs можно полноценный cmd написать *12 - все зависит от того, что надо сделать - практически там все есть*44
09.08.2007 09:26
OlegON
 
Вот еще кидают ссылок :)
Цитата:
1. Если использовать команду DATE /t >%D_Date% теперь есть текущая дата в переменной %D_Date% можешь вычленять из нее, что хочешь и компоновать как надо.
2. В W2000 есть зарезервированные системные переменные DATE и TIME, которые нигде не описаны. Попробуй проиграться с ними.
echo %DATE%echo %TIME%
09.08.2007 09:41
Sullen
 
Цитата:
student На vbs можно полноценный cmd написать *12 - все зависит от того, что надо сделать - практически там все есть*44
Полностью согласен...
Олег, чем тебе VBScript не глянется? *49
09.08.2007 09:51
OlegON
 
Цитата:
Sullen Полностью согласен...
Олег, чем тебе VBScript не глянется? *49
Картинку правильно подобрал :) я чисто из спортивного интереса хотел средствами бат-файла, задачу-то я решил давно :)
17.05.2013 19:03
Tushkanchik
 
так че батником никак ?
17.05.2013 19:41
bayan
 
Цитата:
@echo off
chcp 1251
call :FromNow -1
echo вчера было %ddmmyyyy%
:FromNow
SetLocal
Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,2%%%100
Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12* 12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
Set /A J=J+2-12*L,I=100*(N-49)+I+L
Set /A yyyy=I,mm=100+J,dd=100+K
EndLocal& Set ddmmyyyy=%dd:~-2%.%mm:~-2%.%yyyy%
Exit /B
Но первого числа месяца работать не будет :(
17.05.2013 19:48
OlegON
 
я там выше писал, если мускул или оракл под рукой есть - можно оттуда дернуть в нужном формате... в Линуксе без проблем, в винде - не знаю :( Полистал powershell-доки, кроме формата так ничего и нет...
17.05.2013 20:38
Tushkanchik
 
Решил что так короче будет хоть и не совсем cmd :))

ECHO wscript.echo date-1>tmp.vbs
FOR /F %%A IN ('cscript tmp.vbs //Nologo') DO SET "YESTERDAY=%%A"
ECHO %YESTERDAY%&DEL tmp.vbs
18.05.2013 01:16
KirillHome
 
Старый bat-ник, работает для формата даты ДД (любой разделитель) ММ (любой разделитель) ГГГГ, учитывает високосные года
Код:
@echo off
for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j
for /f "delims=%sdate% tokens=1,2,3" %%i in ("%DATE%") do call :getpackage %%i %%j %%k
 
rem :: проверочка 
rem echo %year%
rem echo %month%
rem echo %day%
echo %package%

rem :: тут можно поместить необходимые нам команды 
 
goto :EOF 
 
:getpackage 
set day=%1
set month=%2
set /a year=%3
set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"
if %day% leq 9 set /a day=%day:~-1%
if %month% leq 9 set /a month=%month:~-1%
set /a day-=1
if "%day%"=="0" set /a month-=1
if "%month%"=="0" set /a month=12,year-=1
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" set lastdays=%lastdays:28=29%
if "%day%"=="0" for /f "tokens=%month%" %%i in (%lastdays%) do set day=%%i
if %day% leq 9 set day=0%day%
if %month% leq 9 set month=0%month%
set package=%year%-%month%-%day%
goto :EOF
Опции темы


Часовой пояс GMT +3, время: 02:07.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.