2

Мне нужно сделать команду, которая берет вчерашнюю дату и встраивает ее в путь к файлу следующим образом:

copy "Something 2010-12-06\*.zip" "d:\Copy\"

где 2010-12-6 - вчерашняя дата в формате yyyy-mm-dd .

Основываясь на ссылке в ответе, я нашел это решение, которое близко к тому, что я хочу, но не совсем:

For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set cdate=%%c-%%b-%%a)
echo "Backup Set*\Backup Files %cdate% *\*.zip" 

Это дает мне сегодняшнюю дату, Как я могу получить вчерашнюю дату?

3 ответа3

1

Мой формат даты выглядит так:

E:\>date /t
Wed 10/17/2012

Это работает для моего формата:

E:\>echo %date:~10,4%-%date:~4,2%-%date:~7,2%
2012-10-17
1

Этот пост посвящен получению даты в любом формате, который вам нравится, в переменную: http://www.tech-recipes.com/rx/956/windows-batch-file-bat-to-get-current-date-in- ММДДГГГГ-формат /

вычитание и использование переменных здесь: http://commandwindows.com/variables.htm

что должен сделать это ...

1

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

@echo off
call :GetDate year month day
echo/Today is: %year%-%month%-%day%
goto :part2

:GetDate yy mm dd
setlocal ENABLEEXTENSIONS
set t=2&if "%date%z" LSS "A" set t=1
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
  for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
    set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :eof


:part2
call :DateToDays %year% %month% %day% days
echo/It has been %days% days since 1970-01-01
goto :part3


:DateToDays %yy% %mm% %dd% days

setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :eof


:part3
set /a yesterday=%days%-1


:part4
call :DaysToDate %yesterday% yy mm dd
echo/Yesterday was %yy%-%mm%-%dd%
goto :copy



:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :eof

:copy
copy "Something %yy%-%mm%-%dd%\*.zip" "d:\Copy\"

:eof

Источник фрагментов скрипта, который я использовал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .