中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 14:40
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行
DOS批处理 & 脚本技术(批处理室) » <<>>如何判断日期自动生成新批处理文件??
可打印版本  4,296 / 22
第1楼 影视狂奔 发表于 2005-03-05 00:00
初级用户 发帖 13 积分 138
<<>>如何判断日期自动生成新批处理文件??
环境:win2000server的dos
计划任务:定一个计划任务,每天10点运行a.bat
a.bat的功能:判断日期(1,6,11,16,21,26,月未日)相等时生成另b.bat文件内容如下并自动执行b.bat:
======================================
atx.exe 200501to200502
atx.exe 200412to200501
atx.exe 200411to200412
ren atx1.txt 0501to0502atx.txt
ren atx2.txt 0412to0501atx.txt
ren atx3.txt 0411to0412atx.txt
======================================
b.bat中的日期内容:为自动判断当前日期生成的,上面的规则是当前日期为2005年3月份,如当前是4月份即如下类推:
======================================
atx.exe 200502to200503
atx.exe 200501to200502
atx.exe 200412to200501
ren atx1.txt 0502to0503atx.txt
ren atx2.txt 0501to0502atx.txt
ren atx3.txt 0412to0501atx.txt
======================================
求教:如何编写a.bat程序(不用第三方软件),谢谢指点!
第2楼 chenhui530 发表于 2005-03-06 00:00
高级用户 发帖 273 积分 772
意思还是不太看得明白
第3楼 影视狂奔 发表于 2005-03-06 00:00
初级用户 发帖 13 积分 138
简单点:win2000server的dos编写一个a.bat批处理实现功能如下:
判断当前日期为(1,6,11,16,21,26,月未日)相等时生成另b.txt文件,
例:当前为3月1日时生成内容如下
atx.exe 200501to200502
ren atx1.txt 0501to0502atx.txt
说明:自动判断当前日期生成的,生成上上月"200501",生成上月"200502"的文本嵌在该txt文件中。
第4楼 chenhui530 发表于 2005-03-06 00:00
高级用户 发帖 273 积分 772
要是是纯粹只用批处理的话不用第三放工具很难,我目前还没想到方法.但是使用VBS就很容易完成
第5楼 chenhui530 发表于 2005-03-06 00:00
高级用户 发帖 273 积分 772
搞定:你把条件讲得详细点我把整个批处理全部给你for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set a=%%c
for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set b=%%b
for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set c=%%a
for %%a in (01 02 03 04 05 06 07 08 09 10 11 12) do if %b%==%%a goto %%a:01
set /a d=%b%+11
set /a e=%b%+10
set /a n=%c%-1
set name=%n%%d%to%n%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:02
set /a d=%b%+10
set /a e=%b%+9
set /a n=%c%-1
set name=%n%%d%to%n%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:03
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:04
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:05
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:06
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:07
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:08
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:09
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:10
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:11
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:12
set /a d=%b%-2
set /a e=%b%-1
set name=%c%%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:end
第6楼 影视狂奔 发表于 2005-03-06 00:00
初级用户 发帖 13 积分 138
不概高手,条件如下,我睇程序有好多共同点,能否简化?

条件:是遇日期为1,6,11,16,21,26,月未日 的时候才生成文件,其它日无须生成。另:echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat 这句的生成有异。。。
正确的应是:ren atx.txt 0501to0502atx.txt (是没有年份的20的)
第7楼 chenhui530 发表于 2005-03-06 00:00
高级用户 发帖 273 积分 772
不好意思楼主一下忘记判断时间了现在修正代码如下for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next1
goto end:next1
第8楼 chenhui530 发表于 2005-03-06 00:00
高级用户 发帖 273 积分 772
怎么搞得又出问题了怎么只出现那么点代码for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set a=%%c
for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set b=%%b
for /f "tokens=1,2,3 delims=- " %%a in ('date /t' do set c=%%a
for %%a in (01 02 03 04 05 06 07 08 09 10 11 12) do if %b%==%%a goto %%a:01
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next1
goto end:next1
set /a d=%b%+11
set /a e=%b%+10
set /a n=%c%-1
set name=%n%%d%to%n%%e%
if %c%==2005 set c=05
set /a n=%c%-1
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt 0%n%%d%to0%n%%e%atx.txt&gt;&gt;b.bat
goto end:02
for %%a in (01 06 11 16 21 26 28) do if %a%==%%a goto next2
goto end:next2
set /a d=%b%+10
set /a e=%b%+9
set /a n=%c%-1
set name=%n%%d%to%n%%e%
if %c%==2005 set c=05
set /a n=%c%-1
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt 0%n%%d%to0%n%%e%atx.txt&gt;&gt;b.bat&gt;&gt;b.bat
goto end:03
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next3
goto end:next3
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:04
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next4
goto end:next4
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:05
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next5
goto end:next5
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:06
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next6
goto end:next6
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:07
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next7
goto end:next7
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:08
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next8
goto end:next8
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:09
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next9
goto end:next9
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:10
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next10
goto end:next10
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:11
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next11
goto end:next11
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:12
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next12
goto end:next12
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:end
第9楼 影视狂奔 发表于 2005-03-06 00:00
初级用户 发帖 13 积分 138
你好牛啊,真佩服。。

我有个想法,能否将“月未日”的算法改为:以当月的1日减1得到上月的月未日期呢?
如:当前为2005-03-06,取2005-03-01减1得出2005-02-28,这样获到28的日期。另:if %c%==2005 set c=05 这句仅适用于2005年,对于2006年就无效了。
第10楼 chenhui530 发表于 2005-03-07 00:00
高级用户 发帖 273 积分 772
你可以自己添加吗if %c%==2006 set c=06不就行了
楼主你最好把你的详细想法写上我好写出代码来不然等我写出代码来你又改变想法
第11楼 影视狂奔 发表于 2005-03-07 00:00
初级用户 发帖 13 积分 138
你的程序已非常好了,

只是写求月未日的方法每月判断有点局限,每年都要改12个月的月未日,可否简捷点?我仅有想法,无法编写程序,所以只能提供该想法如下:

“月未日”的算法改为:以当月的1日减1得到上月的月未日期呢?如:当前为2005-03-06,取2005-03-01减1得出2005-02-28,这样获到28的日期。
第12楼 chenhui530 发表于 2005-03-07 00:00
高级用户 发帖 273 积分 772
老大这是批处理不是其他语言再说要改也只是改2月就行了其他不需要改啊?
第13楼 影视狂奔 发表于 2005-03-07 00:00
初级用户 发帖 13 积分 138
哈哈,也是,也是,忘记了每年的月未日规律添....谢谢指点,非常感激....
第14楼 chenhui530 发表于 2005-03-07 00:00
高级用户 发帖 273 积分 772
没事!还有什么问题就一起提出来吧
第15楼 影视狂奔 发表于 2005-03-07 00:00
初级用户 发帖 13 积分 138
有问题???下列实际执行时提示出错!!!!
set /a d=08-1
set /a d=09-1
无效数字。数学常数只能是十进制(17),十六位进制(0X11)或八进制(021)
另:批处理的变量会不会影响到其它程序???是该批处理的局部变量还是WIN全局变量???该批处理完毕退出后,这些变量还存在吗?
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023