Datetime 循环查看文件时间戳,如果它等于今天';s日期,复制文件
大家好 我在一个文件夹中有一堆SQL文件。现在,我想循环遍历每个文件并获取文件的时间戳。如果时间戳与当前日期匹配,则我希望将该文件复制到新位置 以下是文件的目录结构: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 %
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%"
)