如果属性匹配则复制文件

时间:2017-04-19 10:25:45

标签: xml batch-file

因为我是批处理新手,所以请耐心等待。

我只是在两个属性匹配的情况下尝试将文件从一个位置复制到另一个位置。

我尝试过修改但没有成功:

set dSource=\\server5\Datapool
set dTarget=C:\Users\folder1
set fType=*.xml
for /F "tokens=1,2 delims=:<>" %%a, in ('findstr "Name=\"Marc\"" *.xml|findstr "testcar=\"BENZ231\"" *.xml') do (
    copy /V "%%a" "%dTarget%\" 2>nul
)

因此,我的目标是仅在Marc + BENZ231匹配时复制XML文件。

XML文件看起来像这样:

<testInfo testDuration="57" holidayCount="0" completedtask="12" Name="Marc" testVersion="13" testcar="BENZ231" 
 <result testStepName="locating" sequenceNrResult="1" testStepResult="OK">
 etc.
 </testInfo>
</testresult>

2 个答案:

答案 0 :(得分:0)

findstr string1 string2搜索string1string2。你需要和。如果两个字符串都在同一条线上,那很容易;只需在找到第一个字符串的结果中找到第二个字符串:

findstr "Name=\"Marc\"" test.xml|findstr "testcar=\"BENZ231\""

(注意:你必须逐字逐句"

要在for中正确处理它,您必须转义一些特殊字符(|此处):

for /F "tokens=1,2 delims=:<>" %%a, in ('findstr findstr "Name=\"Marc\"" test.xml^|findstr "testcar=\"BENZ231\""') do (

注意:copy %%a ...' is not a good idea. You need the file name here. Put another around to process each file individually (and you don't need tokens here; just set delims to "none"“delims =”`):

for %%f in (*.xml) do (
  for /F "delims=" %%a, in ('findstr "Name=\"Marc\"" "%%f"^|findstr "testcar=\"BENZ231\""') do (
    copy /V "%%f" "%dTarget%\" 2>nul
  )
)

如果字符串(可能是)在不同的行上,则必须使用不同的方法(解析文件两次; &&用作“如果找到第一个字符串”,则执行此操作:)

findstr "Name=\"Marc\"" test.xml >nul && findstr "testcar=\"BENZ231\"" test.xml

答案 1 :(得分:0)

-----------------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--------------

现在知道了。这个对我来说很好用!