美好的一天
我在一个文件夹中有一堆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
对我在这里做错了什么建议?
由于
答案 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%