我正在尝试将指定的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”都在同一行。
答案 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
以适合您的系统可能使用的日期排序顺序。
这不是最好的方法,但却是一个起点。