使用最新日期提取文件

时间:2017-04-20 02:32:22

标签: batch-file

我正在尝试将指定的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--------------

所以我的目标是仅在“Marc”+“BENZ231”匹配时才将最新的XML文件提取到另一个文件夹中。

btw:两个字符串“marc”和“benz231”都在同一行。

1 个答案:

答案 0 :(得分: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的使用在块内(parens中的任何内容)更新,现在延迟变量扩展在!中包含变量名。

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

这不是最好的方法,但却是一个起点。