Board logo

标题: [文件操作] [已解决]批处理取出当天创建的文件并拷贝到相应目录 [打印本页]

作者: renmingwu    时间: 2009-6-15 18:25     标题: [已解决]批处理取出当天创建的文件并拷贝到相应目录

大家好:
     我在这里向大家请教一段代码,希望大家能帮我解决。
     我现在要从一个文夹中提出当天新建的文件,并把这些文件放到一个新目录中,新目录必须用当天的时间来命名,如我从D盘的TEST目录(包含子目录)下提出当天新建的文件*.txt,并把这些文件拷贝到e盘的当天日期的文件夹中,如今天20090615,创立文件夹并拷贝文件这个我会了,可怎么选出今天新建的文件呢?谢谢大家。
下面是以当天为文件夹名自动建立目录的脚本。
  1. @ECHO    OFF   
  2. set    dst=%date:~0,4%%date:~5,2%%date:~8,2%
  3. :creat_dst   
  4. if    exist    f:\aa\%dst%    goto    copy_test   
  5. md    f:\aa\%dst%   
  6.    
  7. :copy_test   
  8. copy    e:\test\*.*    f:\aa\%dst%   /y   
复制代码
我是这么考虑的,先用一个脚本提出当天建立的文件,然后再用上面的脚本把那个拷贝到当天的日期目录中。

[ 本帖最后由 renmingwu 于 2009-6-18 16:14 编辑 ]
作者: netbenton    时间: 2009-6-15 18:58

  1. @ECHO OFF
  2. SET DIRE=E:\TEST
  3. SET TODAY=%DATE:~,10%
  4. MD D:\%TODAY:-=%
  5. FOR /F "TOKENS=3*" %%A IN ('DIR /A-D /S %DIRE% ^|FINDSTR "%TODAY%"') DO (COPY "%%B" D:\%TODAY:-=%\)
复制代码

作者: renmingwu    时间: 2009-6-15 19:58

谢谢楼上的朋友,可是这个总提示找不到指定的文件,是不是dir得到的日期和findstr中搜索的那个%TODAY%不一样呢?
另COPY "%%B" D:\%TODAY:-=%\)这里的%%B是不是%%A呀,我是初学,有些不太明白。
作者: keen    时间: 2009-6-15 22:22     标题: 回复 3楼 的帖子

2楼的代码中,用的路径是E:\TEST,你要根据自己的目录而改变这个。
%%B 不是%%A,具体参看FOR语句从入门到精通,

http://bbs.bathome.net/thread-2189-1-1.html

[ 本帖最后由 keen 于 2009-6-15 22:23 编辑 ]
作者: renmingwu    时间: 2009-6-15 22:42

回楼上的朋友,已经好了,应该是我改了那个%%B闹的,现在可以了。
我指定了一个文件类型,可以拷贝出指定目录下指定类型的文件到以日期的为目录的文件夹了,问题解决,谢谢!
  1. @ECHO OFF
  2. SET DIRE=E:\TEST
  3. SET TODAY=%DATE:~,10%
  4. MD D:\%TODAY:-=%
  5. FOR /F "TOKENS=3*" %%A IN ('DIR /A-D /S %DIRE%\*.txt ^|FINDSTR "%TODAY%"') DO (COPY "%%B" D:\%TODAY:-=%\)
复制代码
DIR /A-D /S %DIRE%\后面如果加上指定类型就可以拷贝出指定的文件到以当天日期为文件名的目录中了。

[ 本帖最后由 renmingwu 于 2009-6-15 22:47 编辑 ]
作者: renmingwu    时间: 2009-6-17 08:42

大家好:
  今天在使用的过程中,发现了一个问题,dir /a-d得到的日期不是文件的创建日期,而是文件的修改日期,dir/tc才是文件的创建日期,而且还有一个很有意思的问题,如果我们把一个很早以前建立的文件,考到当前的目录中,当前目录就会认为这是一个新建的文件,于是就出现了修改日期早于创立日期的事情。
  1. @ECHO OFF
  2. SET DIRE=E:\TEST
  3. SET TODAY=%DATE:~,10%
  4. MD D:\%TODAY:-=%
  5. FOR /F "TOKENS=3*" %%A IN ('DIR /TC /S %DIRE%\*.txt ^|FINDSTR "%TODAY%"') DO (COPY "%%B" D:\%TODAY:-=%\)
复制代码
DIR /A-D /S %DIRE%\后面如果加上指定类型的文件有时能行,有时就不行。
经过今天的检查和测试,应该是脚本所在的目录中的文件可以被拷走,其他的目录和子目录中的没有动,我觉得应该是%%B得到的只是文件名的名称,而不是文件的具体路径闹的,所以在COPY的时候,COPY能拷走当前目录的文件,可对子目录却没有办法了,希望大家能给我提供一个拷子目录的方法。

[ 本帖最后由 renmingwu 于 2009-6-18 16:14 编辑 ]
作者: netbenton    时间: 2009-6-18 18:27

  1. @echo off&setlocal enabledelayedexpansion
  2. SET DIRE=E:\TEST
  3. SET TODAY=%DATE:~,10%
  4. MD D:\%TODAY:-=%
  5. FOR /F "TOKENS=*" %%A IN ('DIR /S /A-D /B /O-D') DO (
  6.     SET DAT=%%~tA
  7.     IF "!DAT:~,10!" NEQ "!TODAY!" GOTO :END
  8.     COPY "%%A" D:\%TODAY:-=%\
  9. )
  10. :end
复制代码


DIR /S /A-D /B /O-D
(带路径列表显示/B)所有(连子目录下/S)(除目录外/A-D)的文件,并(按日期倒序排列/O-D)

    SET DAT=%%~tA
取文件的最后修改日期

    IF "!DAT:~,10!" NEQ "!TODAY!" GOTO :END
因为是经过排序的,所以只要出现不是当天日期文件就可以结束了
作者: renmingwu    时间: 2009-6-18 22:32

楼上的哥们真是太厉害了,上面的那个代码刚明白了一些,谢谢你!跟你们真是学到了太多的知识了!




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