标题: [日期时间] 批处理使用通配符来拷贝文件名为当前日期的所有文件为何不行? [打印本页]
作者: happyzhu 时间: 2011-7-26 20:49 标题: 批处理使用通配符来拷贝文件名为当前日期的所有文件为何不行?
各位老大,大家好。
我想写一个拷贝文件的批处理,如下- @echo off
- set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%
- copy d:\%TimeNow%*.* g:\
- pause
复制代码
就是想拷贝d盘里面文件名包含TimeNow字符串的所有文件,但是该程序运行后
不只拷贝包含TimeNow字符串的文件,其他文件也都一并拷贝了。初学批处理,
不知道是什么原因,老大们给点建议。
作者: cjiabing 时间: 2011-7-26 21:29
你检查看日期格式是这个吗?【2011-07-26】
再检查dir文件的日期格式是否一致?
作者: happyzhu 时间: 2011-7-26 22:02
回复 2# cjiabing
您好,谢谢你的提示。但是还是有问题,会将文件夹里的
所有文件都拷贝过去,而不是只拷贝2011-07-26开头的文件。
我的文件名一般都是:
2011-07-25-01.txt
2011-07-25-02.txt
2011-07-26-01.txt
2011-07-26-02.txt
2011-07-26-03.txt
。。。
我就是想拷贝当前日期,比如现在运行,就是拷贝以
2011-07-26开头的所有文件。
作者: cjiabing 时间: 2011-7-26 22:21
检查你的命令“copy d:\%TimeNow%*.* g:\”
这是将D盘文件夹“%TimeNow%”下的所有文件拷贝到G盘的意思,你那日期变成文件夹了,你把程序放到桌面试试就知道了。
正确的应该是使用条件判断命令IF对结果进行排除判断。否则就要用xcopy命令:
xcopy /D:m-d-y 复制在指定日期或指定日期以后更改的文件。
如果没有提供日期,只复制那些源时间
比目标时间新的文件。
作者: hfg1977 时间: 2011-7-26 22:50
该命令并没有任何错误,
此时%TimeNow% == 2011-07-26 ,该命令会copy以默认时间格式开头的任意文件, 对于有空格的文件
建议加引号: [ copy "d:\%TimeNow%*.*" g:\ ]
"cjiabing 检查你的命令“copy d:\%TimeNow%*.* g:\”
这是将D盘文件夹“%TimeNow%”下的所有文件拷贝到G盘的意思 "
这样的说法是错误的.
至于楼主出现的问题, 建议:
1 把d盘的文件列出,以供参考.
2,贴出全部代码,以供检查.
作者: cjiabing 时间: 2011-7-26 23:03
回复 5# hfg1977
基本上不用Copy,俺仅从一般规律考虑,不懂其特别情况,求真相!~
作者: hfg1977 时间: 2011-7-26 23:23
真相都是浮云.
那几条代码没有错误.
有时我们会遇到莫名的问题,由于系统不同, 设置不同, 开启的服务不同, 或病毒影响, 或者个人的理解不同,
, 或windows系列先天缺陷,正确的事也会变成错误.
此题无解.
作者: cjiabing 时间: 2011-7-26 23:28
本帖最后由 cjiabing 于 2011-7-27 00:12 编辑
特地试了一下,用你提供的文件名和代码,执行成功,不过不是拷到G盘,而是C盘。
没注意他使用的是通配符,见笑了!~
作者: mxxcgzxxx 时间: 2011-7-27 11:15
本帖最后由 mxxcgzxxx 于 2011-7-27 11:19 编辑
代码是没错的,程序不会无原无故的出错,所以要从事件本身出发进行分析
首先楼主并不是没有执行程序而是执行了拷贝了所有文件,所以效果等同于
copy d:\*.* g:\,那么只能说明%TimeNow%失效了,它是不是空值?
为什么会失效?- set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%
复制代码
这句话本身是没错的,但如果末尾多个空格呢?那就不一样了- copy d:\2011-07-26 *.* g:\
复制代码
这样就相当于查找了两个类型的文件,先找2011-07-26,无果,再找*.*,结果就全部到G盘了
所以这是编程时的常见问题,多了个空格结果就不一样了,就算加上引号也无法匹配
楼主一定是在自己的批处理中末尾多了个空格
不信的话可以在SET 句后加一句,进行校验:复制代码
就可以一目了然了
作者: Hello123World 时间: 2011-7-29 13:12
他应该没有多加空格吧,复制他的代码set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%后面并没有空格。
楼主试试:- copy /y "d:\*%timenow%*.*" g:\
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |