将文件从目录复制到另一个目录中的日期

时间:2014-06-23 14:20:46

标签: date batch-file copy range

正如您在对象中看到的,我需要将文件名中包含指定范围内日期的所有文件复制。

我会尝试用一个例子来解释。

我在目录中有这些文件:

  • 20140619_LogStat.txt
  • 20140620_LogStat.txt
  • 20140621_LogStat.txt
  • 20140622_LogStat.txt
  • 20140623_LogStat.txt
  • 20140624_LogStat.txt
  • 20140625_LogStat.txt
  • 20140627_LogStat.txt
  • 20140628_LogStat.txt
  • 20140629_LogStat.txt
  • 20140630_LogStat.txt

我需要一个批处理文件,询问我要在另一个目录中复制文件的开始日期和最后日期。

我的代码是:

@echo off

set /p StartDate= Inserire la data di INIZIO dei log da spostare (formato: AAAAMMDD)
set /p LastDate= Inserire la data di FINE dei log da spostare (formato: AAAAMMDD)

set /a Range=%LastDate%-%StartDate%

PAUSE

FOR %%A IN (1, 1, %Range%) DO (

set /a j=%StartDate% + 1

copy /-y "C:\%j%*.txt" "D:\directory"

)

这一行问我开始日期:

set /p StartDate= Inserire la data di INIZIO dei log da spostare (formato: AAAAMMDD)

这一行问我结束日期(正如你在两行中看到的那样,我写了所要求的格式):

set /p StartDate= Inserire la data di INIZIO dei log da spostare (formato: AAAAMMDD) 

然后我设置一个范围,以便对FOR CYCLE有用的天数:

set /a Range=%LastDate%-%StartDate%

现在我需要在Range变量的引用中重复FOR CYCLE。 然后我设置一个新的变量“j”,它将等于(StartDate + 1)第一个循环,(StardDate + 2)第二个循环......依此类推......

如果我的输入(前两行代码)是: 20140619 20140625

确实: 20140625-20140619 = 6 - >范围变量

for循环从0开始并继续到6。

设置变量20140619 + 0并将文件20140619 * .txt复制到目录

FOR CYCLE结束并继续加1,直到复制的最后一个文件是20140625,因为20140619 + 6 = j是20140625

我希望我的目标很明确。

先谢谢你的帮助!!

2 个答案:

答案 0 :(得分:1)

@echo off

set /p StartDate= Inserire la data di INIZIO dei log da spostare (formato: AAAAMMDD)
set /p LastDate= Inserire la data di FINE dei log da spostare (formato: AAAAMMDD)


set "source_dir=c:\date_files\"
set "destination_dir=d:\directory"

setlocal enableDelayedExpansion
FOR %%A IN (c:\date_files\*_LogStat.txt) DO (

        set "filename=%%~nA"
        set "file_date=!filename:~0,8!"

        if !file_date! GTR !StartDate! if !file_date! LSS !LastDate! (
            copy /-y "%%~fA" "%destination_dir%"
        )


)
endlocal

答案 1 :(得分:1)

使用您指定的文件格式,这应该有效:

@echo off

set /p StartDate= Inserire la data di INIZIO dei log da spostare (formato: AAAAMMDD)
set /p LastDate= Inserire la data di FINE dei log da spostare (formato: AAAAMMDD)

FOR /L %%A IN (%startdate%, 1, %lastdate%) DO (
   if exist "C:\%%A_logstat.txt" copy /-y "C:\%%A_logstat.txt" "D:\directory"
)
pause