Board logo

标题: [日期时间] 批处理使用通配符来拷贝文件名为当前日期的所有文件为何不行? [打印本页]

作者: happyzhu    时间: 2011-7-26 20:49     标题: 批处理使用通配符来拷贝文件名为当前日期的所有文件为何不行?

各位老大,大家好。
我想写一个拷贝文件的批处理,如下
  1. @echo off
  2. set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%
  3. copy d:\%TimeNow%*.*  g:\
  4. 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%失效了,它是不是空值?
为什么会失效?
  1. set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%
复制代码
这句话本身是没错的,但如果末尾多个空格呢?那就不一样了
  1. copy d:\2011-07-26 *.*  g:\
复制代码
这样就相当于查找了两个类型的文件,先找2011-07-26,无果,再找*.*,结果就全部到G盘了
所以这是编程时的常见问题,多了个空格结果就不一样了,就算加上引号也无法匹配

楼主一定是在自己的批处理中末尾多了个空格
不信的话可以在SET 句后加一句,进行校验:
  1. echo.%TimeNow%a &pause
复制代码
就可以一目了然了
作者: Hello123World    时间: 2011-7-29 13:12

他应该没有多加空格吧,复制他的代码set TimeNow=%date:~0,4%-%date:~5,2%-%date:~8,2%后面并没有空格。
楼主试试:
  1. copy  /y "d:\*%timenow%*.*" g:\
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2