精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】批处理命令能否每7天自动更新调用当天日期 (https://bbs.et8.net/bbs/showthread.php?t=1391673)

lminz 2021-02-22 08:41:39

【求助】批处理命令能否每7天自动更新调用当天日期
 
例如
20210101
7天后变成
20210108
再过7天变成
20210115
一直循环。
或者说调用每周五的日期。
只要是用在FastCopy中自动备份,还有RAR自动加密压缩。
目前是手动每7天改一下批处理文件。
不知有没有办法可以偷懒。
谢谢!!!

xclimbing 2021-02-22 08:52:32

试一下用%date%代替日期。


D:\TEMP>echo %date%
2021-02-22

D:\TEMP>echo %date:-=%
20210222

lminz 2021-02-22 09:04:15

引用:

作者: xclimbing (文章 17732514)
试一下用%date%代替日期。


D:\TEMP>echo %date%
2021-02-22

D:\TEMP>echo %date:-=%
20210222

这个只能显示当前日期,我要调用每周星期五,
例如这一周批处理都是使用20210219,到过了20210219又自动使用下一周的20210226。
如此循环

SmartP 2021-02-22 09:30:27

引用:

作者: lminz (文章 17732525)
这个只能显示当前日期,我要调用每周星期五,
例如这一周批处理都是使用20210219,到过了20210219又自动使用下一周的20210226。
如此循环

为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期

hsw 2021-02-22 09:56:00

引用:

作者: SmartP (文章 17732554)
为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期

赞同这个做法

lminz 2021-02-22 09:56:33

引用:

作者: SmartP (文章 17732554)
为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期

批处理本来就是用计划任务啊,只是数据库生成的文件名包含日期,所以每周5都会生成新的备份文件,批处理就要对应的改成这个文件名。

tacoal 2021-02-22 10:12:11

引用:

作者: lminz (文章 17732572)
批处理本来就是用计划任务啊,只是数据库生成的文件名包含日期,所以每周5都会生成新的备份文件,批处理就要对应的改成这个文件名。

2楼的会返回当天的日期,所以只要脚本是按计划执行得,就会产生依据当时日期和时间的文件名
看下面的例子,你可以照葫芦画瓢按照你的要求
代码:

echo off
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)

set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%

set SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
mkdir %SUBFILENAME%
echo "Welcome Here!" > access_%SUBFILENAME%.log


xclimbing 2021-02-22 11:34:50

关键的问题是批处理没有特别有效的办法处理日期的加减,当然,也不是没有办法,稍微有点儿麻烦就是了。

一、在批处理中调用vbs处理日期:

@Echo Off
Echo NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.arguments^(0^)^)>Day.vbs
Echo Wscript.Echo NewDate>>Day.vbs
echo set basedate=2021-02-19>basedate.bat

call basedate.bat
if not defined basedate set basedate=2021-02-19
echo 当前基础日期:%basedate%
set dayadd=7

for /f "tokens=*" %%i in ('cscript /nologo Day.vbs %basedate% %dayadd%') do (set nextdate=%%i)
if %date% GEQ %nextdate% set basedate=%nextdate%
echo set basedate=%basedate%>basedate.bat
echo 当前日期:%date%
echo 下一个基础日期:%nextdate%
echo 当前基础日期:%basedate%
pause

Del /q Day.vbs


执行结果:

D:\TEMP\test>TestDateAddvbs1.cmd
当前基础日期:2021-02-19
当前日期:2021-02-22
下一个基础日期:2021-02-26
当前基础日期:2021-02-19
请按任意键继续. . .

xclimbing 2021-02-22 11:43:41

二、用批处理自身的计算功能处理日期加减,这个就相对复杂一些。


@echo off & setlocal

call :Date2Day "2020-02-28" -2 Day (2天后的日期)
echo %Day%
call :Date2Day "2020-03-01" 2 Day (2天前的日期)
echo %Day%
pause
goto :EOF

:: 使用方法:call :Date2Day 2007-11-12 2 Day
:: 变量 Day 就是2007-11-12 减2的结果。
:Date2Day 计算指定天数 前/后 的日期 (封装)
@echo off&setlocal
for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%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
set /a i=j-%~2,a=i+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 %~3=%yy%%f%%mm%%f%%dd%&goto :EOF



代码:

@echo off & setlocal

call :Date2Day "2020-02-28"  -2 Day (2天后的日期)
echo %Day%
call :Date2Day "2020-03-01"  2 Day (2天前的日期)
echo %Day%
pause
goto :EOF

::  使用方法:call :Date2Day 2007-11-12 2 Day
::  变量 Day 就是2007-11-12 减2的结果。
:Date2Day 计算指定天数 前/后 的日期 (封装)
@echo off&setlocal
for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%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

set /a i=j-%~2,a=i+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 %~3=%yy%%f%%mm%%f%%dd%&goto :EOF


C# 2021-02-22 11:59:58

批处理运行的触发条件是什么?每天手工点击一次运行?

lminz 2021-02-22 12:11:32

引用:

作者: xclimbing (文章 17732635)
关键的问题是批处理没有特别有效的办法处理日期的加减,当然,也不是没有办法,稍微有点儿麻烦就是了。一、在批处理中调用vbs处理日期:[shell] Echo OffEcho NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.argument......

这个比较好,不过设置了基础日期,再多一两个周期就不对了。
因为顺着时间推移,基础日期就不对了。
例如我设备基础日期是2021-02-05,得出来的结果应该是2021-02-19
实际得出来是2021-02-12。
另外得出来的格式能否没有中间的“-”
例如20200219这样的格式
谢谢!!!

lminz 2021-02-22 12:14:18

引用:

作者: C# (文章 17732650)
批处理运行的触发条件是什么?每天手工点击一次运行?

触发条件是时间啊,例如每天0点运行。
因为数据库每天增量备份,每周五生成的是完全备份。
批处理是把文件压缩,并每天FTP传输到分公司异地备份。
完全备份的批处理每周五运行一次。
每天的增量备份每天运行。

kpzyq 2021-02-22 12:58:48

引用:

作者: lminz (文章 17732659)
触发条件是时间啊,例如每天0点运行。
因为数据库每天增量备份,每周五生成的是完全备份。
批处理是把文件压缩,并每天FTP传输到分公司异地备份。
完全备份的批处理每周五运行一次。
每天的增量备份每天运行。

这个不就是计划任务的功能么?直接取当时的时间就够了呀,计划任务时选择每周五运行就行了。

xclimbing 2021-02-22 13:04:24

引用:

作者: lminz (文章 17732658)
这个比较好,不过设置了基础日期,再多一两个周期就不对了。
因为顺着时间推移,基础日期就不对了。
例如我设备基础日期是2021-02-05,得出来的结果应该是2021-02-19
实际得出来是2021-02-12。
另外得出来的格式能否没有中间的“-”
例如20200219这样的格式
谢谢!!!

楼主,你要这样,最好就先发个红包,综合我各个楼层的回复,你稍加变通就可以解决问题,我已经把饭做好都给你放桌子上了,你需要做的是自己把饭吃到嘴里,而你现在的要求是我把饭喂到你嘴里,这就有点过分了。对不对?

毕竟你也没有交待你的原始批处理是怎样的,运行环境如何,别人就是给你一个解决问题的思路,我觉得我的思路完全没有问题,甚至我在本地都测试了一下闫年2月28日和29日的计算问题,大方向上完全没有问题。

lminz 2021-02-22 14:53:05

引用:

作者: xclimbing (文章 17732678)
楼主,你要这样,最好就先发个红包,综合我各个楼层的回复,你稍加变通就可以解决问题,我已经把饭做好都给你放桌子上了,你需要做的是自己把饭吃到嘴里,而你现在的要求是我把饭喂到你嘴里,这就有点过分了。对不对?

毕竟你也没有交待你的原始批处理是怎样的,运行环境如何,别人就是给你一个解决问题的思路,我觉得我的思路完全没有问题,......

再次谢谢老大,给我写了这么多
只要是118老大没给个发红包的功能,,,4
例如我改日期到4月,运行结果是这个

当前基础日期:2021-02-19
当前日期:2021-04-09
下一个基础日期:2021-02-26
当前基础日期:2021-02-26
请按任意键继续. .


我批处理就是这样的
主要是老大你的代码我有些看不明白嘛,,,69
加粗的日期就是要手动改,现在是每周改一次。
只是想问问有没有办法自动。楼上说计划任务能改,估计是理解错了我的意思吧。
计划任务只能按时执行这个批处理文件。
以下是我的批处理文件:
先把备份文件复制到本机,再用WINRAR命令压缩。

代码:

set "ymd=%date:~,4%%date:~5,2%%date:~8,2%"
"G:\Job\FastCopy.exe" /cmd=Sync  /auto_close /no_ui  /balloon=FALSE  /error_stop=FALSE /log /logfile=G:\Job\Log\%ymd%dailylog.log /utf8  /Include="20210219*log.bak "            "\\IP地址\DBbackup" /to="H:\dbbackup"


C:\WinRAR\WinRAR.exe a -m4 密码 H:\bin\DailyLog\20210219systemdb_log.rar H:\dbbackup\20210219systemdb_log.bak



所有时间均为北京时间, 现在的时间是 07:21:15.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号