标题: [日期时间] 批处理按日期复制文件为何8月1日、9月1日执行失败? [打印本页]
作者: 7016427 时间: 2014-8-9 18:57 标题: 批处理按日期复制文件为何8月1日、9月1日执行失败?
- @echo off
- set /a y=%date:~0,4%
- set /a m=%date:~5,2%-1
- set /a ms=%date:~5,2%-2
- REM m=%date:~5,2%-1,变量为上月月份
- if %m% lss 10 set m=0%m%
- if %ms% lss 10 set ms=0%ms%
- REM 月份小于10时,补零为两位数
- set jy=[%y%年%m%月%]
- if "%date:~8,2%"=="01" echo f | xcopy d:\统计\速报.* /h /y g:\客运月报\速报%jy%.xls
- if not %errorlevel%==0 (echo 速报失败 ?)
- attrib g:\客运月报\*.* -h
- pause
复制代码
以上批处理文件,8月1日、9月1日执行失败,其余月份执行正常!
作者: DAIC 时间: 2014-8-9 20:29
set /a m=%date:~5,2%-1
这种写法是错误的
1、8月份%date:~5,2%的值是08,于是命令实际是:
set /a m=08-1
这个08会被认为是八进制数,计算会出错。
2、你确定1月份的时候正常吗?
1-1=0,没有0月份的吧。
作者: apang 时间: 2014-8-9 20:43
本帖最后由 apang 于 2014-8-9 21:50 编辑
08,09这种数字set /a 不认识,第三行改成
set /a m=1%date:~5,2%-101
作者: 7016427 时间: 2014-8-10 09:34
回复 3# apang
你好!我按你的指导测试,还发现一个小问题,不知怎么解决!如2015年1月1日执行时,文件名为:速报[2015年00月].xls,怎么改使他自动变为:速报[2014年12月]?
作者: apang 时间: 2014-8-10 22:44
回复 4# 7016427 - @echo off
- set /a y=%date:~0,4%,m=(1%date:~5,2%-90)%%12+101,y-=m/112
- set "jy=[%y%年%m:~1%月]"
-
- if "%date:~8,2%"=="01" echo f | xcopy d:\统计\速报.* /h /y g:\客运月报\速报%jy%.xls
- if not %errorlevel%==0 (echo 速报失败 ?)
- attrib g:\客运月报\*.* -h
- pause
复制代码
作者: 7016427 时间: 2014-8-11 19:51
回复 5# apang
@echo off
set /a y=%date:~0,4%,m=(1%date:~5,2%-90)%%12+101,y-=m-2/112
set "jy=[%y%年%m:~1%月]"
if "%date:~8,2%"=="01" echo f | xcopy d:\统计\速报.* /h /y g:\客运月报\速报%jy%.xls
if not %errorlevel%==0 (echo 速报失败 ?)
attrib g:\客运月报\*.* -h
pause
以上我想实现,9月1日复制时,复制的文件为:速报2014年7月。为什么以上执行失败!
作者: apang 时间: 2014-8-11 20:41
回复 6# 7016427
因为你改错了
把你的具体要求更新到顶楼再说
作者: 7016427 时间: 2014-8-11 20:48
回复 7# apang
请问老师应该怎么改?
作者: 7016427 时间: 2014-8-11 20:54
回复 7# apang
要求是:每月1号复制,复制后的文件名为上上月,比如,9月1日执行,复制后的文件名为"速报2014年7月.xls"
作者: apang 时间: 2014-8-11 21:06
回复 9# 7016427
更新到顶楼,也就是1楼。如果出现0月,-1月怎么办
作者: 7016427 时间: 2014-8-11 22:12
回复 10# apang
按5楼老师的怎么改法
如:9月1日执行,复制后的文件名为:速报2014年7月
作者: 7016427 时间: 2014-8-12 19:13
@echo off
set /a y=%date:~0,4%
set /a m=1%date:~5,2%-102
set "jy=[%y%年%m:~%月]"
if "%date:~8,2%"=="01" echo f | xcopy d:\统计\速报.* /h /y g:\客运月报\速报
%jy%.xls
if not %errorlevel%==0 (echo 速报失败 ?)
attrib g:\客运月报\*.* -h
pause
以上2015年2月1日执行时,复制的文件名为2015年0月,我要的结果为2014年12月,其他月份复制的文件名都正确!
作者: apang 时间: 2014-8-12 19:23
你拒绝更新到顶楼,我拒绝有效回答,公平合理
作者: 7016427 时间: 2014-8-12 21:11
回复 13# apang
请问老师,怎么改?
作者: CrLf 时间: 2014-8-12 21:43
回复 14# 7016427
帖子的每层都有 回复 和 引用 两个链接,如果是自己发的,会多一个 编辑,点进去就能修改帖子了
作者: 7016427 时间: 2014-8-12 21:50
回复 5# apang
@echo off
set /a y=%date:~0,4%
set /a m=1%date:~5,2%-102
set "jy=[%y%年%m:~%月]"
if "%date:~8,2%"=="01" echo f | xcopy d:\统计\速报.* /h /y g:\客运月报\速报
%jy%.xls
if not %errorlevel%==0 (echo 速报失败 ?)
attrib g:\客运月报\*.* -h
pause
以上2015年2月1日执行时,复制的文件名为2015年0月,我要的结果为2014年12月,其他月份复制的文件名都正确!
作者: CrLf 时间: 2014-8-12 22:00
回复 16# 7016427
你是看不懂 13 楼的意思还是就是不把要求更新到顶楼?
作者: 7016427 时间: 2014-8-12 22:30
回复 apang
@echo off
set /a y=%date:~0,4%,m=(1%date:~5,2%-90)%%12+101,y-=m-2/112
set "jy=[%y%年 ...
7016427 发表于 2014-8-11 19:51
老师你好!以上2015年2月1日执行时,复制的文件名为2015年0月,我要的结果为2014年12月,其他月份复制的文件名都正确!还麻烦老师改改
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |