. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#1 旧 2021-02-22, 08:41:39 默认 已解答: 【求助】批处理命令能否每7天自动更新调用当天日期
lminz 当前离线  

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


http://blog.06108.cn
回复时引用此帖
最佳解答为:xclimbing
引用:
作者: lminz 查看帖子
再次谢谢老大,给我写了这么多
只要是118老大没给个发红包的功能
例如我改日期到4月,运行结果是这个

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


我批处理就是这样的
主要是老大你的代码我...
要不说没有搞过程序设计的人,最好还是先把问题交待清楚,你纠结于生成这个日期,其实完全没有必要,楼上这个从现有文件名中提取日期的思路就很正确。

例如,下面的代码是不是根本不需要计算日期,就自动解决了所有问题:
代码:
for /f "tokens=*"  %%i in ('dir /b/od \\IP地址\dbbackup\*log.bak') do set lastfile=%%i
set thedate=%lastfile:~0,8%
echo 获取的最新备份文件日期前缀为:%thedate%
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="%thedate%*log.bak "  "\\IP地址\DBbackup"  /to="H:\dbbackup"
C:\WinRAR\WinRAR.exe a -m4 密码 H:\bin\DailyLog\%thedate%systemdb_log.rar H:\dbbackup\%thedate%systemdb_log.bak
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 805 声望值: 0
精华: 0,解答: 13
#2 旧 2021-02-22, 08:52:32 默认
xclimbing 当前离线  

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


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

D:\TEMP>echo %date:-=%
20210222
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#3 旧 2021-02-22, 09:04:15 默认
lminz 当前离线  

引用:
作者: xclimbing 查看帖子
试一下用%date%代替日期。


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

D:\TEMP>echo %date:-=%
20210222
这个只能显示当前日期,我要调用每周星期五,
例如这一周批处理都是使用20210219,到过了20210219又自动使用下一周的20210226。
如此循环
回复时引用此帖
SmartP
 
SmartP 的头像
核心会员
 
资 料:
注册日期: Sep 2001
帖子: 2,103 声望值: 3
精华: 0,解答: 4
#4 旧 2021-02-22, 09:30:27 默认
SmartP 当前离线  

引用:
作者: lminz 查看帖子
这个只能显示当前日期,我要调用每周星期五,
例如这一周批处理都是使用20210219,到过了20210219又自动使用下一周的20210226。
如此循环
为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期
回复时引用此帖
hsw
 
hsw 的头像
支柱会员
 
资 料:
注册日期: Jan 2001
帖子: 4,487 声望值: 3
精华: 1,解答: 11
#5 旧 2021-02-22, 09:56:00 默认
hsw 当前离线  

引用:
作者: SmartP 查看帖子
为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期
赞同这个做法
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#6 旧 2021-02-22, 09:56:33 默认
lminz 当前离线  

引用:
作者: SmartP 查看帖子
为什么我觉得应该是用计划任务每周五某一时间执行呢? 这样你的批处理根本不要理会日期
批处理本来就是用计划任务啊,只是数据库生成的文件名包含日期,所以每周5都会生成新的备份文件,批处理就要对应的改成这个文件名。
回复时引用此帖
tacoal
 
tacoal 的头像
终极会员
 
资 料:
注册日期: Aug 2000
帖子: 10,396 声望值: 3
精华: 0,解答: 30
#7 旧 2021-02-22, 10:12:11 默认
tacoal 当前离线  

引用:
作者: lminz 查看帖子
批处理本来就是用计划任务啊,只是数据库生成的文件名包含日期,所以每周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

此帖于 2021-02-22 10:17:09 被 tacoal 编辑. .
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 805 声望值: 0
精华: 0,解答: 13
#8 旧 2021-02-22, 11:34:50 默认
xclimbing 当前离线  

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

一、在批处理中调用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
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 805 声望值: 0
精华: 0,解答: 13
#9 旧 2021-02-22, 11:43:41 默认
xclimbing 当前离线  

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


@echo off & setlocal

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

:: 使用方法:call ate2Day 2007-11-12 2 Day
:: 变量 Day 就是2007-11-12 减2的结果。
ate2Day 计算指定天数 前/后 的日期 (封装)
@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#
 
C# 的头像
核心会员
 
资 料:
注册日期: Oct 2000
帖子: 3,066 声望值: 3
精华: 0,解答: 12
#10 旧 2021-02-22, 11:59:58 默认
C# 当前离线  

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



滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红

白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 都付谈笑中
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#11 旧 2021-02-22, 12:11:32 默认
lminz 当前离线  

引用:
作者: xclimbing 查看帖子
关键的问题是批处理没有特别有效的办法处理日期的加减,当然,也不是没有办法,稍微有点儿麻烦就是了。一、在批处理中调用vbs处理日期:[shell] Echo OffEcho NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.argument......
这个比较好,不过设置了基础日期,再多一两个周期就不对了。
因为顺着时间推移,基础日期就不对了。
例如我设备基础日期是2021-02-05,得出来的结果应该是2021-02-19
实际得出来是2021-02-12。
另外得出来的格式能否没有中间的“-”
例如20200219这样的格式
谢谢!!!
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#12 旧 2021-02-22, 12:14:18 默认
lminz 当前离线  

引用:
作者: C# 查看帖子
批处理运行的触发条件是什么?每天手工点击一次运行?
触发条件是时间啊,例如每天0点运行。
因为数据库每天增量备份,每周五生成的是完全备份。
批处理是把文件压缩,并每天FTP传输到分公司异地备份。
完全备份的批处理每周五运行一次。
每天的增量备份每天运行。
回复时引用此帖
kpzyq
 
kpzyq 的头像
核心会员
 
资 料:
注册日期: Oct 2001
帖子: 2,994 声望值: 3
精华: 0,解答: 1
#13 旧 2021-02-22, 12:58:48 默认
kpzyq 当前离线  

引用:
作者: lminz 查看帖子
触发条件是时间啊,例如每天0点运行。
因为数据库每天增量备份,每周五生成的是完全备份。
批处理是把文件压缩,并每天FTP传输到分公司异地备份。
完全备份的批处理每周五运行一次。
每天的增量备份每天运行。
这个不就是计划任务的功能么?直接取当时的时间就够了呀,计划任务时选择每周五运行就行了。
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 805 声望值: 0
精华: 0,解答: 13
#14 旧 2021-02-22, 13:04:24 默认
xclimbing 当前离线  

引用:
作者: lminz 查看帖子
这个比较好,不过设置了基础日期,再多一两个周期就不对了。
因为顺着时间推移,基础日期就不对了。
例如我设备基础日期是2021-02-05,得出来的结果应该是2021-02-19
实际得出来是2021-02-12。
另外得出来的格式能否没有中间的“-”
例如20200219这样的格式
谢谢!!!
楼主,你要这样,最好就先发个红包,综合我各个楼层的回复,你稍加变通就可以解决问题,我已经把饭做好都给你放桌子上了,你需要做的是自己把饭吃到嘴里,而你现在的要求是我把饭喂到你嘴里,这就有点过分了。对不对?

毕竟你也没有交待你的原始批处理是怎样的,运行环境如何,别人就是给你一个解决问题的思路,我觉得我的思路完全没有问题,甚至我在本地都测试了一下闫年2月28日和29日的计算问题,大方向上完全没有问题。
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#15 旧 2021-02-22, 14:53:05 默认
lminz 当前离线  

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

毕竟你也没有交待你的原始批处理是怎样的,运行环境如何,别人就是给你一个解决问题的思路,我觉得我的思路完全没有问题,......
再次谢谢老大,给我写了这么多
只要是118老大没给个发红包的功能
例如我改日期到4月,运行结果是这个

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


我批处理就是这样的
主要是老大你的代码我有些看不明白嘛
加粗的日期就是要手动改,现在是每周改一次。
只是想问问有没有办法自动。楼上说计划任务能改,估计是理解错了我的意思吧。
计划任务只能按时执行这个批处理文件。
以下是我的批处理文件:
先把备份文件复制到本机,再用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
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 10:49:56.

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

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