2017-04-20 77 views
0

我试图从一个文件夹提取指定的XML数据到另一个文件夹。使用最新日期提取文件

问题是我只需要最新的。当前日期应该确定最新的XML文件。比如今天:2017年4月20日

我scirpt如下:

-----------------test.bat-------------- 
@echo off&pushd \\server5\Datapool 
for /f %%a in ('dir /b ^| find ".xml"') do for /f %%A in ('type %%a ^| find /I "Marc" ^| find /I "BENZ231"') do copy %%a C:\Users\folder1 
-----------------test.bat-------------- 

所以我的目标是将最新的XML文件解压到另一个文件夹只有当“马克” +“BENZ231”匹配。

btw:字符串“marc”和“benz231”在同一行上。

+3

你的问题与XML完全没有关系,我已经删除了标签。仅仅因为你试图用XML扩展来移动文件,它并没有提出关于XML的问题。请不要标记垃圾邮件;仅使用** **与您的帖子实际相关的标签。您可以在使用它之前通过阅读标签描述来确定它们是否是。标签在这里有意义和相关性,这就是为什么每个人都有一个关于它是什么和应该使用什么的描述。谢谢。 –

+0

我会考虑到这一点。谢谢 – Zaynqx

+0

请不要发布[重复](http://stackoverflow.com/q/43493012/2152082)。使用'xcopy'而不是'copy' - 它有一个功能,只复制比指定日期更新的文件。另外'/ m'参数可能是有意义的。请参阅'xcopy/?'获取更多帮助。 – Stephan

回答

0

尝试

rem -----------------test.bat-------------- 
@echo off & SetLocal EnableDelayedExpansion 
set "file=" 
set "srcFolder=\\server5\Datapool" 
set "dstFolder=C:\Users\folder1" 

rem language independent time 
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "Tm=%%a" 
set "today=%Tm:~0,4%%Tm:~4,2%%Tm:~6,2%" 

pushd "%srcFolder%" 
for /f "usebackq tokens=*" %%a in (`dir /b /o:d *.xml`) do (
    set "fileTime=%%~ta" 
    rem set "fileTime_spanish=!fileTime:~6,4!!fileTime:~3,2!!fileTime:~0,2!" 
    set "fileTime_english=!fileTime:~6,4!!fileTime:~0,2!!fileTime:~3,2!" 
    if "!fileTime_english!" equ "%today%" (
    findstr /irc:"marc.*BENZ231" /c:"BENZ231.*marc" %%a && copy "%%a" "%dstFolder%" 
) 
) 
popd 
EndLocal 
exit/B 
rem -----------------test.bat-------------- 

注意/o:d开关dir命令列出文件按日期(最新最后一次)进行排序的。更改了for循环以将file变量设置为与dir通配符匹配的所有文件,并将字符串传递给findstr。由于dir已列出按日期排序的文件,因此file变量将根据这两个条件包含最新的文件。

EDITED 25/04/2017

注意现在使用delayed expansion作为filetime_xxx是一个块(括号内的任何)的内部更新,并且延迟变量扩展。现在在!包围变量名。

您可能需要调整filetime_xxx以适合系统可能使用的任何日期排序顺序。

这不是最好的办法,而是一个起点。

+1

要支持可能的文件名和空格,您需要将'delims ='或'tokens = *'添加到for选项和双引号'“%file%”' – LotPings

+0

@LotPings你是对的!我不在我的电脑前。发布编辑。 – elzooilogico

+0

嘿!感谢您的回复,并对我迟到的回复感到抱歉。它适用于我一半,但只复制一个单一的文件。它应该复制所有新的马克+奔驰231。我在做什么?错误?编辑:我没有向正确的方向解释自己。如果上面提到的属性匹配,我想从今天的日期复制所有文件。对不起,不清楚。 – Zaynqx