Como obter valor de data na linha de comando

2

Eu preciso fazer um comando que pegue a data de ontem e a construa em um caminho de arquivo como este:

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

em que 2010-12-6 é a data de ontem no formato yyyy-mm-dd .

Com base no link em resposta, encontrei essa solução, que é próxima do que eu quero, mas não exatamente:

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

Isso me dá a data de hoje, como posso obter a data de ontem?

    
por awe 07.12.2010 / 11:03

3 respostas

1

Isso é realmente confuso no momento, mas funciona. Vou tentar nomear as coisas corretamente e arrumá-las mais tarde hoje à noite, a menos que alguém mais queira editar minha resposta.

@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

Fonte dos trechos de script que usei.

    
por 07.12.2010 / 13:05
1

Esta publicação lida com a obtenção da data em qualquer formato que você queira em uma variável:

subtração e uso variável está aqui: link

isso deveria ser feito ...

    
por 07.12.2010 / 11:45
1

Meu formato de data é assim:

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

Isso funciona no meu formato:

E:\>echo %date:~10,4%-%date:~4,2%-%date:~7,2%
2012-10-17
    
por 17.10.2012 / 17:04