[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

各位老大,大家好。
我想写一个拷贝文件的批处理,如下
  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字符串的文件,其他文件也都一并拷贝了。初学批处理,
不知道是什么原因,老大们给点建议。

你检查看日期格式是这个吗?【2011-07-26】
再检查dir文件的日期格式是否一致?
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 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开头的所有文件。

TOP

检查你的命令“copy d:\%TimeNow%*.*  g:\”
这是将D盘文件夹“%TimeNow%”下的所有文件拷贝到G盘的意思,你那日期变成文件夹了,你把程序放到桌面试试就知道了。
正确的应该是使用条件判断命令IF对结果进行排除判断。否则就要用xcopy命令:
xcopy  /D:m-d-y     复制在指定日期或指定日期以后更改的文件。
             如果没有提供日期,只复制那些源时间
             比目标时间新的文件。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

该命令并没有任何错误,

此时%TimeNow% ==  2011-07-26 ,该命令会copy以默认时间格式开头的任意文件, 对于有空格的文件
建议加引号: [ copy "d:\%TimeNow%*.*"  g:\ ]

"cjiabing 检查你的命令“copy d:\%TimeNow%*.*  g:\”
这是将D盘文件夹“%TimeNow%”下的所有文件拷贝到G盘的意思 "  

这样的说法是错误的.

至于楼主出现的问题, 建议:
1 把d盘的文件列出,以供参考.
2,贴出全部代码,以供检查.
“阿姐走了。。。可是。。。我。。。我愿意。”

TOP

回复 5# hfg1977


    基本上不用Copy,俺仅从一般规律考虑,不懂其特别情况,求真相!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

真相都是浮云.
那几条代码没有错误.
有时我们会遇到莫名的问题,由于系统不同, 设置不同, 开启的服务不同, 或病毒影响, 或者个人的理解不同,
, 或windows系列先天缺陷,正确的事也会变成错误.
此题无解.
“阿姐走了。。。可是。。。我。。。我愿意。”

TOP

本帖最后由 cjiabing 于 2011-7-27 00:12 编辑

特地试了一下,用你提供的文件名和代码,执行成功,不过不是拷到G盘,而是C盘。
没注意他使用的是通配符,见笑了!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 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
复制代码
就可以一目了然了
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

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

TOP

返回列表