![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 08:04 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已解决]如何在每天早上的8点后才把日期设置成当日? |
| 可打印版本 1,196 / 14 |
| 第1楼 ajian | 发表于 2010-12-03 16:47 |
| 初级用户 发帖 38 积分 38 | |
|
[已解决]如何在每天早上的8点后才把日期设置成当日? 要求一个批处理,每次执行时先验证一下时间,如果时间大于当天8点,则把当天日期赋值给某个变量,如果小于当日8点,则那个变量保持在当日的前一天?
谢谢了。 [ Last edited by ajian on 2010-12-8 at 19:13 ] |
|
| 第2楼 ajian | 发表于 2010-12-03 22:56 |
| 初级用户 发帖 38 积分 38 | |
|
没人出手吗?
|
|
| 第3楼 ajian | 发表于 2010-12-04 16:28 |
| 初级用户 发帖 38 积分 38 | |
|
我现在设置一个变量为set day=%date:~5,2%%date:~8,2%%time:~0,2%,但0点到9点之间会有问题,因为显示是1204 0时之类的,日期和时间空了一格,有没有办法用0把这个空格填上,然后就可以作比较了。
|
|
| 第4楼 ajian | 发表于 2010-12-04 16:36 |
| 初级用户 发帖 38 积分 38 | |
|
其实这个东西比较简单,就是某日0点到8点之间,不去变更某个变量,我批处理不会弄,还望高手帮我啊。
|
|
| 第5楼 ajian | 发表于 2010-12-05 16:44 |
| 初级用户 发帖 38 积分 38 | |
|
for /f "tokens=1,2 delims= " %%a in ("%time:~0,2%") do set tmpTime=%%a
if %date:~0,4%%date:~5,2%%date:~8,2%%tmpTime% geq %date:~0,4%%date:~5,2%%date:~8,2%8 ( set tmpDate=%date:~0,4%%date:~5,2%%date:~8,2% ) else ( set var=%date:~0,4%%date:~5,2%%date:~8,2% set /A tmpDate=var-1 ) for /f %%x in ('findstr %tmpDate:~5,4% User.txt') do (set y=%%x) 哈哈,自己乱搞一下居然可以用。 |
|
| 第6楼 Hanyeguxing | 发表于 2010-12-05 17:36 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
楼主把日期改成3月1日或1月1日,看自己的代码运行还正常不?
[ Last edited by Hanyeguxing on 2010-12-6 at 13:28 ] |
|
| 第7楼 ajian | 发表于 2010-12-06 11:03 |
| 初级用户 发帖 38 积分 38 | |
|
是不正常,忘了这个了,呵呵。
[ Last edited by ajian on 2010-12-6 at 11:06 ] |
|
| 第8楼 ajian | 发表于 2010-12-06 11:21 |
| 初级用户 发帖 38 积分 38 | |
Originally posted by Hanyeguxing at 2010-12-5 17:36: |
|
| 第9楼 ajian | 发表于 2010-12-06 11:38 |
| 初级用户 发帖 38 积分 38 | |
|
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set Y=%%a&set M=0%%b&set D=0%%c set K=%Y%-%M:~-2%-%D:~-2% for /f "tokens=1,2 delims= " %%a in ("%time:~0,2%") do set tmpTime=%%a if %tmpTime% lss 8 call:D,1 echo 符合条件的日期%K% pause&exit :D if "!M:~0,1!"=="0" set M=!M:~1! if "!D:~0,1!"=="0" set D=!D:~1! set/a D-=%1 if %D% gtr 0 goto:Y :M set/a M-=1 if !M!==0 set/a Y-=1,M=12 set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D" if %D% leq 0 goto:M :Y set M=0%M%&set D=0%D%&set K=%Y%-!M:~-2!-!D:~-2! 弄成这样就行了,太感谢了。 |
|
| 第10楼 ajian | 发表于 2010-12-06 12:47 |
| 初级用户 发帖 38 积分 38 | |
|
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /s /b /a-d "C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\InboxLOG.txt"') do (for /f "delims=" %%b in ('type "%%a"') do set lastLine=%%b %%b) call :getThe01thArg theStatus %lastLine% call :getThe07thArg theTime %lastLine% call :getThe13thArg theNumber %lastLine% call :getThe15thArg thePage %lastLine% for /f "tokens=1,2 delims=:" %%a in ("%theTime%") do set theTime=%%a点%%b分 echo 传真接收%theStatus:~-3,2%,请及时处理! >> messg.txt echo 号码:%theNumber:~1,-1% >> messg.txt echo 时间:%date:~5,2%月%date:~8,2%日%theTime% >> messg.txt echo 页数:%thePage%页 >> messg.txt for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set Y=%%a&set M=0%%b&set D=0%%c set K=%Y%-%M:~-2%-%D:~-2% for /f "delims= " %%a in ("%time:~0,2%") do set tmpTime=%%a if %tmpTime% lss 8 call:D,1 for /f %%x in ('findstr %K:~5,2%%K:~8,2% User.txt') do (set y=%%x) set y fetion --mobile=138XXXXXXXX --pwd=XXXXXXXX --to=%y:~5,11% --file-gb=messg.txt del messg.txt pause goto :EOF :D if "!M:~0,1!"=="0" set M=!M:~1! if "!D:~0,1!"=="0" set D=!D:~1! set/a D-=%1 if %D% gtr 0 goto:Y :M set/a M-=1 if !M!==0 set/a Y-=1,M=12 set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D" if %D% leq 0 goto:M :Y set M=0%M%&set D=0%D%&set K=%Y%-!M:~-2!-!D:~-2! :getThe07thArg set varTage=%1 for /l %%i in (1,1,7) do shift /7 set %varTage%=%1 :getThe13thArg set varNumber=%1 for /l %%i in (1,1,13) do shift /1 set %varNumber%=%1 :getThe01thArg set varStatus=%1 for /l %%i in (1,1,1) do shift /1 set %varStatus%=%1 :getThe15thArg set varPage=%1 for /l %%i in (1,1,15) do shift /1 set %varPage%=%1 为什么这个批处理小于8点运行时会显示两行“命令语法不正确”,而大于8点就不会显示,但运行结果都是正确的,是不是哪里没弄好? |
|
| 第11楼 Hanyeguxing | 发表于 2010-12-06 13:27 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
批处理代码不是随便就可以拼凑一起的。。。
1,6楼的代码要使用,其中的:D、:M、:Y、三个标签必须必须位于批处理的最下面,否则需要在set M=0%M%&set D=0%D%&set K=%Y%-!M:~-2!-!D:~-2!下面加goto:eof。 2,6楼代码获得日期的日期格式为:YYYY-MM-DD。 |
|
| 第12楼 ajian | 发表于 2010-12-06 13:46 |
| 初级用户 发帖 38 积分 38 | |
|
不好意思,本人是个菜鸟,只会七拼八凑,呵呵。
那个:D :M :Y放到最后会有问题,显示两行“找不到操作数”,按你的方法,在set M=0%M%&set D=0%D%&set K=%Y%-!M:~-2!-!D:~-2!后面加goto :EOF后,已经正确了,再次感谢。 |
|
| 第13楼 ajian | 发表于 2010-12-08 16:28 |
| 初级用户 发帖 38 积分 38 | |
|
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set Y=%%a&set M=0%%b&set D=0%%c set K=%Y%-%M:~-2%-%D:~-2% for /f "delims=:." %%a in ("%time%") do ( set a=0%%a if "!a:~-2!" lss "08" call:D,1 ) echo 符合条件的日期%K% pause&exit :D:子命令 if "!M:~0,1!"=="0" set M=!M:~1! if "!D:~0,1!"=="0" set D=!D:~1! set/a D-=%1 if %D% gtr 0 goto:Y :M set/a M-=1 if !M!==0 set/a Y-=1,M=12 set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D" if %D% leq 0 goto:M :Y set M=0%M%&set D=0%D%&set K=%Y%-!M:~-2!-!D:~-2! goto:eof 这段代码每月8、9日,如果时间小于8时,输出的日期会变成上个月的后两天。 |
|
| 第14楼 Hanyeguxing | 发表于 2010-12-08 16:40 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
不好意思,合并代码时变量产生了交叉
[ Last edited by Hanyeguxing on 2010-12-8 at 16:45 ] |
|
| 第15楼 ajian | 发表于 2010-12-08 16:48 |
| 初级用户 发帖 38 积分 38 | |
|
谢谢,你真厉害。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |