bat脚本得到前一天的日期的代码

  @echo off

  ::年月日字符串

  set str_date=%date:~0,4%%date:~5,2%%date:~8,2%

  ::星期几

  set str_week_val=%date:~-1%

  ::本地要备份的文件夹路径

  set str_webpath_local=D:wwwroot

  ::本地备份文件存放路径

  set str_path_local=D:web_bak

  ::网站压缩包名称前缀

  set str_rar_name=MH_WEB

  ::异地 备份路径

  set str_path_day=z:最新7天网站备份

  ::异地 备份路径

  set str_path_weekend=z:最新4个周末的网站备份

  ::异地 备份路径

  set str_path_month=z:每个月底的网站备份

  ::取两位月份数字

  set m=%date:~5,2%

  ::第一位为0则只取个位数

  if %m:~0,1%==0 set /a m=%m:~1,1%*1

  ::取四位年份数字(这个命令用不到5位数那年吧)

  set /a x=%date:~0,4%

  ::闰年判断条件1 %%代表取余

  set /a y=%x%*1%%4

  set /a y2=%x%*1%%100

  ::闰年判断条件2 %%代表取余

  set /a y3=%x%*1%%400

  ::默认2月份只有28天

  set ld=28

  ::满足闰年条件1

  if %y%==0 (

  if %y2% NEQ 0 set ld=29

  )

  ::满足闰年条件2

  if %y3%==0 set ld=29

  for %%i in (1 3 5 7 8 10 12)do (if %m%==%%i set /a ld=31)

  for %%i in (4 6 9 11)do (if %m%==%%i set /a ld=30)

  ::echo 日期:%ld%

  ::pause

  ::当月月底的年月日字符串

  set str_monthend_val=%date:~0,4%%date:~5,2%%ld%%

  c:

  cd C:Program FilesWinRAR

  echo %time%开始压缩 >>%str_path_local%%str_date%_log.bak

  rar a -u -x*.log* %str_path_local%%str_rar_name%%str_date%.rar %str_webpath_local%

  echo %time%结束压缩 >>%str_path_local%%str_date%_log.bak

  echo. >>%str_path_local%%str_date%_log.bak

  echo %time%开始复制 >>%str_path_local%%str_date%_log.bak

  if "%str_date%"=="%str_monthend_val%" (

  xcopy %str_path_local%%str_rar_name%%str_date%.rar %str_path_month% /d/y

  ) else (

  if "%str_week_val%"=="日" (

  xcopy %str_path_local%%str_rar_name%%str_date%.rar %str_path_weekend% /d/y

  ::删除4周前的rar文件

  FORFILES /P %str_path_weekend% /M *.rar /D -22 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%%str_date%_del.bak

  ) else (

  xcopy %str_path_local%%str_rar_name%%str_date%.rar %str_path_day% /d/y

  ::删除7天前的rar文件

  FORFILES /P %str_path_day% /M *.rar /D -7 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%%str_date%_del.bak

  )

  )

  echo %time%结束复制 >>%str_path_local%%str_date%_log.bak

  echo. >>%str_path_local%%str_date%_log.bak

  ::删除本地1天前的rar文件

  FORFILES /P %str_path_local% /M *.rar /D -1 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%%str_date%_del.bak

  ::删除本地7天前的bak记录文件

  FORFILES /P %str_path_local% /M *.bak /D -7 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%%str_date%_del.bak