. : : ClassiClub ForuM : : .

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

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



发表新主题 回复
 
主题工具
C#
 
C# 的头像
核心会员
 
资 料:
注册日期: Oct 2000
帖子: 3,066 声望值: 3
精华: 0,解答: 12
#16 旧 2021-02-22, 15:02:16 默认
C# 当前离线  

echo %date% 里有 weekday呀

然后
代码:
set weekday=%date:~11,2%
set "ymd=%date:~,4%%date:~5,2%%date:~8,2%"

IF "%weekday%" =="周五" (
   ECHO %weekday%
    WINRAR...%ymd%
)
如果有ELSE 就用
代码:
IF "%weekday%" =="周五" (
   ECHO %weekday%
    WINRAR...%ymd%
) ELSE (
   echo %weekday%
   .....
)

就行了
就OK了。

此帖于 2021-02-22 15:07:53 被 C# 编辑. .



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

白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 都付谈笑中
回复时引用此帖
lucida
 
lucida 的头像
终极会员
 
资 料:
注册日期: Sep 2001
帖子: 8,207 声望值: 3
精华: 4,解答: 106
#17 旧 2021-02-22, 15:24:18 默认
lucida 当前在线  

数据库备份的时候,自动按周五日期命名备份文件
批处理需要匹配这个文件名,是这个意思吗?

如果这样,可以列所有符合格式的文件,找到最新的那个
从文件名里面截取日期
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#18 旧 2021-02-22, 16:05:03 默认
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

此帖于 2021-02-22 16:46:27 被 xclimbing 编辑. .
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#19 旧 2021-02-22, 16:30:52 默认
lminz 当前离线  

已取用18楼的方案。
18楼第二行要加个 set ""
已测试OK
非常感谢楼上各位的耐心指导。


http://blog.06108.cn
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#20 旧 2021-02-22, 16:47:55 默认
xclimbing 当前离线  

谢谢采纳。第二行确实丢了一个set命令,没有测试环境,所以没有实际运行测试。
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#21 旧 2021-02-27, 10:33:44 默认
lminz 当前离线  

引用:
作者: xclimbing 查看帖子
谢谢采纳。第二行确实丢了一个set命令,没有测试环境,所以没有实际运行测试。
你好,能否再请教一下
列所有符合格式的文件,找到最新的那个
从文件名里面截取日期

这个已经可以,如果我想从指定第几个文件截取日期,请问应该怎么写?
不介意我@你一下吧,谢谢!
@xclimbing
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#22 旧 2021-02-27, 10:48:29 默认
xclimbing 当前离线  

引用:
作者: lminz 查看帖子
你好,能否再请教一下
列所有符合格式的文件,找到最新的那个
从文件名里面截取日期

这个已经可以,如果我想从指定第几个文件截取日期,请问应该怎么写?
不介意我@你一下吧,谢谢!
@xclimbing
批处理的程序设计能力其实很差的,没有传统的编程语言那么随心所欲,比如你这个指定第几个文件的功能,几乎就没有简便的方法,至少暂时我没有什么好的解决方案,批处理的for命令只适合取最后一个(把顺序颠倒一遍也可以说是第一个)。而且,按你的程序运行环境,本来就应该取最后一个。其他特殊情况,那就要用更多代码来解决了。

你最好把详细的应用环境和设计目标交待一下,也就是把问题明确化(前面已经暴露了这个问题,你不懂编程,就明确说需求),否则你这甲方不断变换需求,乙方是会无所适从的。
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#23 旧 2021-02-27, 11:50:47 默认
lminz 当前离线  

如果获取不到第几个文件名,那换个方法
就是取上一周的日期。
因为要做一次完全备份
这个是固定每周五运行,所以只需要取上周五的日期
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#24 旧 2021-02-27, 12:20:56 默认
xclimbing 当前离线  

那就取得这个周五(当天)的日期,然后用我前面的批处理做一个减7天的操作不就完成任务了。
回复时引用此帖
lucida
 
lucida 的头像
终极会员
 
资 料:
注册日期: Sep 2001
帖子: 8,207 声望值: 3
精华: 4,解答: 106
#25 旧 2021-02-27, 14:18:39 默认
lucida 当前在线  

forfiles
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#26 旧 2021-02-27, 16:40:31 默认
lminz 当前离线  

引用:
作者: xclimbing 查看帖子
那就取得这个周五(当天)的日期,然后用我前面的批处理做一个减7天的操作不就完成任务了。
你看看是否有要改善的
红色日期我是手动改了测试的,正常换回%date%,每周五运行
暂时测试可以


代码:
@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-26>basedate.bat

call basedate.bat
if not defined basedate set basedate=%date%
echo Current date:%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

set fullbakday=%basedate:~,4%%basedate:~5,2%%basedate:~8,2%
set today=%date:~,4%%date:~5,2%%date:~8,2%
set lastday=%nextdate:~,4%%nextdate:~5,2%%nextdate:~8,2%
echo Last full backup date:%basedate%

echo today:%today%
echo fullbakday:%fullbakday%
echo lastday:%lastday%
Del /q Day.vbs
Del /q basedate.bat

C:\WinRAR\WinRAR.exe a -m4 密码 H:\路径\%lastday%systemdb_log.rar \\IP地址\DBbackup\%lastday%systemdb_log.bak
C:\WinRAR\WinRAR.exe a -m4 密码 H:\路径\%fullbakday%systemdb.rar \\IP地址\DBbackup\%fullbakday%systemdb.bak

此帖于 2021-02-27 16:46:57 被 lminz 编辑. .
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#27 旧 2021-02-27, 17:54:18 默认
xclimbing 当前离线  

引用:
作者: lminz 查看帖子
你看看是否有要改善的
红色日期我是手动改了测试的,正常换回%date%,每周五运行
暂时测试可以


[CODE]@Echo Off
Echo NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.arguments^(0^)^)>Day.vbs
Echo Ws...
你这个逻辑还是很混乱的,按你这个程序,那个basedate不还是每次运行都需要手工设置吗?你理解我的批处理中为什么有这么两行代码吗?
echo set basedate=2021-02-26>basedate.bat
call basedate.bat

这两行,完全可以用:set basedate=2021-02-26这一条命令来代替,为什么我要这么设计?

另外,你这个批处理在计划任务中是什么时间执行的?

我主要搞不清楚,你批处理中的basedate跟today的关系,按道理说,这两个应该是同一天才对。你的批处理就应该是每周五执行,把上周的数据库完整备份本地压缩备份,然后是本周的日志文件本地压缩备份,对吧?

如果是这样的话,这个basedate变量就没有存在的必要了。
回复时引用此帖
xclimbing
 
xclimbing 的头像
高级会员
 
资 料:
注册日期: Jan 2019
帖子: 809 声望值: 0
精华: 0,解答: 13
#28 旧 2021-02-27, 18:01:23 默认
xclimbing 当前离线  

上面没仔细看你的说明,确实就如同我所推测的,如果照你这么说,批处理完全可以改成这样:

代码:
@Echo Off
Echo NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.arguments^(0^)^)>Day.vbs
Echo Wscript.Echo NewDate>>Day.vbs

echo Current date:%date%
set dayadd=-7

for /f "tokens=*" %%i in ('cscript /nologo Day.vbs %date% %dayadd%') do (set nextdate=%%i)

set fullbakday=%date:~,4%%date:~5,2%%date:~8,2%
::set today=fullbakday
set lastday=%nextdate:~,4%%nextdate:~5,2%%nextdate:~8,2%
echo Last full backup date:%date%

::echo today:%fullbakday%
echo Today is fullbakday:%fullbakday%
echo Last Friday:%lastday%

C:\WinRAR\WinRAR.exe a -m4 密码 H:\路径\%lastday%systemdb_log.rar \\IP地址\DBbackup\%lastday%systemdb_log.bak
C:\WinRAR\WinRAR.exe a -m4 密码 H:\路径\%fullbakday%systemdb.rar \\IP地址\DBbackup\%fullbakday%systemdb.bak

Del /q Day.vbs
回复时引用此帖
lminz
 
lminz 的头像
热心会员
 
资 料:
注册日期: May 2002
帖子: 4,921 声望值: 3
精华: 0,解答: 4
#29 旧 2021-02-27, 18:59:43 默认
lminz 当前离线  

引用:
作者: xclimbing 查看帖子
上面没仔细看你的说明,确实就如同我所推测的,如果照你这么说,批处理完全可以改成这样:[code] Echo OffEcho NewDate = DateAdd^("d", Wscript.arguments^(1^), Wscript.arguments^(0^)^)>Day.vbsEcho ......
非常感谢你的热心帮助
回复时引用此帖
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,388 声望值: 3
精华: 21,解答: 84
#30 旧 2021-02-27, 19:51:27 默认
namejm 当前离线  

我看到以上代码在获取日期的时候
大都基于批处理 %date% 的结果
这里有个比较致命的陷阱,需要引起各位的注意
那就是 %date% 的结果并不一定就是 yyyy/MM/dd 的格式
有可能是 yy.MM.dd
也有可能是 yy-MM-dd
甚至是丧心病狂的 yy:MM-dd 的格式
这取决于系统中短日期的设置
如果系统中短日期的设置被改动过,可能不会得到期望的结果
如果只是本机使用,这个短日期格式可以自行控制还好
如果想用在别人的机器上
就不一定能得到正确的日期
最好换成其他的方式来获取日期,比如用批处理生成一段vbs代码

短日期的格式在Win7下可以通过以下途径查看/设置:
任务栏中单击时间区域,弹出的对话框中选择 更改日期和时间设置 → 更改日期和时间 → 更改日历 → 区域和语言 → 格式 → 其他设置 → 日期 → 短日期
上传的图像
文件类型: jpg 短日期设置.jpg (97.9 KB, 24 次查看)


TotalCommder、EveryThing、batch、AutoHotKey、EverEdit
精通Word、Excel、PPT的安装与卸载
熟练掌握VB、C++、SQL的拼读与缩写
回复时引用此帖
发表新主题 回复

主题工具

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


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

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

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