Как получить и отобразить вчерашнюю дату? - PullRequest
4 голосов
/ 02 июня 2010

Я использую команду даты для пакетного сценария.
Мне интересно, как использовать команду date для получения вчерашней даты.

Ответы [ 9 ]

9 голосов
/ 29 июня 2010

Основная опасность с переменной даты - это чувствительность локали. Если у вас есть PowerShell (в наши дни это встречается гораздо чаще даже в крупных корпорациях), вы можете использовать PowerShell для форматирования и обернуть его в пакетную инструкцию FOR.

Следующая строка PowerShell выполнит математику и отформатирует для вас дату: -

PowerShell $date = Get-Date; $date=$date.AddDays(-1); $date.ToString('yyyy-MM-dd')

Затем вы можете выполнить это с помощью FOR, чтобы получить его в переменную пакетного файла (не обращая внимания на экранирование целой группы символов с символом шляпы ^ и используя обратную косую черту, чтобы избежать вставленных кавычек):

for /f "usebackq" %%i in (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-1^)^; $date.ToString^('yyyy-MM-dd'^)`) do set YESTERDAY=%%i echo %YESTERDAY%

Я уверен, что кто-то с превосходными навыками PowerShell и пакетного программирования может уменьшить количество команд PowerShell и / или количество экранированных символов, чтобы сделать его более читаемым / поддерживаемым.

4 голосов
/ 02 июня 2010

Глядя на @ JRL's ответ ... Если это действительно так сложно, возможно, используйте PowerShell, а затем сделайте аналогично Дата получения Powershell: как получить вчера в 22:00 в переменной

Вы можете вызвать PowerShell в файле bat следующим образом: Использовать bat для запуска скрипта Powershell

В итоге вы получите решение с тремя или четырьмя вкладышами, а не 100 или около того написанное (безукоризненно добавлю) Робом ван дер Вудом.

Удачи ...

4 голосов
/ 02 июня 2010

Каждый раз, когда вы слышите партию, подумайте, Роб Ван дер Вуд. Во всяком случае, вот вчера. Бат .

3 голосов
/ 30 сентября 2010

Существует гораздо более дешевый способ сделать это, только в пакетном режиме. Я знаю, это грубо, но у меня это сработало.

В основном пишите вчерашнюю дату в текстовый файл, например yesterday.txt. Затем позвоните в следующий раз, когда процесс запустится. Работает для моего процесса, который выполняется только один раз в день.

::pick up yesterdays date from file
::Needs to be done as the file generated today is *yesterdays* report.
for /F "tokens=1" %%a IN (D:\BIN\Yesterday.txt) DO set yest=%%a

::Write todays date to file for use tomorrow
echo %date% >D:\BIN\Yesterday.txt

Затем вы можете назвать дату вчерашнего дня как переменную с помощью %yest%.

2 голосов
/ 04 сентября 2013

Мне показалось, что этот скрипт хорошо работает

@echo off

set yyyy=

set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
set %%x=%%u
set %%y=%%v
set %%z=%%w
set $d1=
set $tok=))

if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

set CurDate=%mm%/%dd%/%yyyy%
set dayCnt=%1

if "%dayCnt%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

:CHKDAY
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
REM ** Month 12 falls through

:SET31
set /A dd=31 + %dd%
goto CHKDAY

:SET30
set /A dd=30 + %dd%
goto CHKDAY

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto CHKDAY

:SET29
set /A dd=29 + %dd%
goto CHKDAY

:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%

REM Set IIS and AWS date variables
set IISDT=%yyyy:~2,2%%mm%%dd%
set AWSDT=%yyyy%-%mm%-%dd%

Результаты будут выглядеть так:

IIS Date: 130904
AWS Date: 2013-09-04

Сценарий взят из http://www.powercram.com/2010/07/get-yesterdays-date-in-ms-dos-batch.html

1 голос
/ 02 мая 2018

Просто создайте командный файл и добавьте это:

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "result=%yyyy%-%mm%-%dd%"
REM Below Will echo full date including year, month and yesterday's date.
echo %result%
REM Below line will echo yesterday's date (Day only).
echo %DD%
pause
1 голос
/ 29 января 2018

1) Вот скрипт под названием yesterday.bat:

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     cscript //E:JScript //nologo "%~f0"
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/

var d = new Date();
d.setDate(d.getDate() - 1);

var mm=(d.getMonth())+1
if (mm<10){
  mm="0"+mm;
}
var dd=d.getDate();
if (dd<10) {
 dd="0"+dd;
}
WScript.Echo(d.getFullYear()+""+mm+""+dd);

Вы можете использовать его как

for /f %%a in ('yesterday.bat') do set "ystd=%%a"

2) Вот одна строка с powershell, которую вы, скорее всего, установили:

    powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"

и вы можете присвоить это переменной:

    for /f %%a in ('powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"') do set ystd=%%a
0 голосов
/ 04 апреля 2018

Самый простой способ получить дату вчерашнего дня (ГГГГММДД) в партии:

set D=%date:~-10,2%
set /A D -= 1
echo %date:~-4,4%%date:~-7,2%%D%
0 голосов
/ 14 марта 2013

я выполнил вчерашнюю дату следующим образом.

set m=%date:~-7,2%
set /A m -= 1
set DATE_DIR=%date:~-10,2%-%m%-%date:~-4,4%

формат можно изменить в строке 3

пример выходных данных: 03-13-2013

это самый простой способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...