Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 循环查看文件时间戳,如果它等于今天';s日期,复制文件_Datetime_Batch File_Cmd - Fatal编程技术网

Datetime 循环查看文件时间戳,如果它等于今天';s日期,复制文件

Datetime 循环查看文件时间戳,如果它等于今天';s日期,复制文件,datetime,batch-file,cmd,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 %

大家好

我在一个文件夹中有一堆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
有没有关于我做错了什么的建议


谢谢

如果我了解您需要做什么,这应该会起作用:

此代码的前四行将为您提供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"
对于指定文件夹中的每个.sql文件,如果文件日期(前10个字符,我假设在某些mm/dd/yyyy变量中的日期)等于当前日期(相同数量的字符),请将文件复制到新目录

已编辑-似乎2008年服务器安装出现了延迟扩展问题。在相同的假设下(根据OP原始问题中的数据),日期是在某个mm/dd/yyyy变量中,并且由于filedatetime中的文件日期是以相同的格式返回的(据我所知),在
%date%
变量中,这个“应该”工作(我希望前面的代码也“应该”工作),不会延迟扩展

@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
它获取“%date%”返回的数据的第一个标记,对于指定集中的每个文件,获取文件日期时间字段中的第一个标记,并重新检查拆分的当前日期。如果两个值相等,则将文件复制到目标

编辑2-好吧,它似乎不工作在2008年的服务器。下一次尝试。也没有延迟扩展。只要
%date%
变量以与文件datetime相同的格式返回信息(不确定它是否可以不同),并且在文件datetime中,日期部分显示在时间部分之前,“可能”就可以了

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "source=d:\descargas\_work\x"
    set "target=c:\newLocation"

    for /f "tokens=2 delims=|" %%a in (
        'cmd /q /d /c "for %%f in ("%source%\*.*") do echo(%%~tf^|%%~ff"^|findstr /l /i /b /c:"%date%"'
    ) do (
        echo copy "%%a" "%target%"
    )

嗨,福克斯德里夫。谢谢,这是有效的,但不是我想要的。您正在匹配当前日期和文件名中包含的日期。我想将当前日期与文件的时间戳相匹配,而不是文件名中包含的日期。很棒的东西。正是我需要的。非常感谢你。以下字符的作用是:~%和%%?@DextrousDave:
%%~tg
是变量g的
引用的文件的时间,
%%~fg
是g引用的文件的完整路径。有关完整的参考资料,请参见
获取/?
。您好。还有一个问题。我在本地电脑上使用了这段代码,效果很好(Win7)。现在我在WindowsServer2008上尝试了这个,但它不起作用。我认为这与语法分析有关!文件日期!。当我回音的时候!文件日期!在我的本地电脑上,它显示日期。然而,当我回音!文件日期!在Windows 2008服务器上,输出显示:ECHO已关闭。我确实尝试过删除@echo off,但是消息变为“echo is on”。windows 2008服务器上的filedate变量有什么问题?@DextrousDave,测试新代码。如果这在您的2008上不起作用,那么问题不是延迟扩展。谢谢,但仍然不起作用。删除echo off时,我只能看到返回的%date%值,而不能看到文件的日期值(%%b)。。。
@echo off
    setlocal enableextensions disabledelayedexpansion

    set "source=d:\descargas\_work\x"
    set "target=c:\newLocation"

    for /f "tokens=2 delims=|" %%a in (
        'cmd /q /d /c "for %%f in ("%source%\*.*") do echo(%%~tf^|%%~ff"^|findstr /l /i /b /c:"%date%"'
    ) do (
        echo copy "%%a" "%target%"
    )