循环遍历文件时间戳,如果它等于今天的日期,则复制文件

时间:2014-01-31 14:12:58

标签: datetime batch-file cmd

美好的一天

我在一个文件夹中有一堆SQL文件。现在我想遍历每个文件并获取文件的时间戳。如果时间戳与当前日期匹配,那么我想将该文件复制到新位置。

以下是文件的目录结构:

c:\MFA\MFA_timestamp\MFA_timestamp.sql

文件的例子是:

c:\MFA\MFA_20131008\MFA_20131008.sql

所以这是我到目前为止的代码,但它不对......

set currentDate=%date%

FOR /R c:\MFA\ %%G IN (*.sql) DO SET %%G=%file%

FOR %%f IN (%file%) DO SET filedatetime=%%~tf
IF %filedatetime:~0, 10% == %currentDate% goto same

goto notsame

:same
copy %file% c:\NEWLOCATION

goto next

:notsame

goto end

:next

对我在这里做错了什么建议?

由于

2 个答案:

答案 0 :(得分:1)

如果我明白你需要做什么,这应该有用:

此代码的前四行将为您提供XP Pro及更高版本中可靠的YY DD MM YYYY HH Min Sec变量。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%"

for /r "c:\mfa" %%a in (MFA_%datestamp%.sql) do copy "%%a" "d:\target\folder"

答案 1 :(得分:1)

@echo off
setlocal enableextensions enabledelayedexpansion

set "currentDate=%date:~0,10%"
    for %%g in ("c:\mfa\*.sql") do (
     set "fileDate=%%~tg"
     set "fileDate=!fileDate:~0,10!"
     if "!fileDate!"=="%currentDate%" (
        copy "%%~fg" "c:\newLocation"
     )
    )

对于指定文件夹中的每个.sql文件,如果文件日期(10个第一个字符,我假设某个mm / dd / yyyy变体中的日期)等于当前日期(相同的字符数),将文件复制到新目录

已编辑 - 似乎2008服务器安装会出现delayedexpansion问题。在相同的假设下(来自OP原始问题中的数据),日期是以某个mm / dd / yyyy变化,并且因为在{{我知道的)文件日期在{{返回}中以相同的格式返回1}}变量,这个“应该”工作(我希望,前面的代码也“应该”工作)没有delayedexpansion

%date%

它将获取'%date%'返回的数据的第一个标记,并且对于指定集合中的每个文件,获取文件datetime字段中的第一个标记,并再次检查拆分的当前日期。如果两个值相等,则将文件复制到目标。

编辑2 - 好吧,它似乎在2008服务器中不起作用。接下来试试。也没有延迟扩张。至于@echo off setlocal enableextensions disabledelayedexpansion for /f %%d in ("%date%") do for %%a in ("c:\mfa\*.sql") do for /f %%b in ("%%~ta") do ( if "%%b"=="%%d" copy "%%~fa" "c:\newLocation" ) endlocal 变量以与文件datetime相同的格式返回信息(不确定它是否可以不同),并且在文件datetime中日期部分出现在时间部分之前,“也许”这个有效

%date%