2017-04-19 19 views
0

bitte ertragen Sie mich seit ich bin neu zu Batch.Kopieren Sie Dateien, wenn Attribute übereinstimmen

Ich versuche, Dateien nur dann von einem Ort zum anderen zu kopieren, wenn zwei Attribute übereinstimmen.

Ich habe versucht, sich um und ändern aber nicht gelungen mit:

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 
) 

Also mein Ziel ist es XML-Dateien nur, wenn Marc + BENZ231 Spiel zu kopieren.

XML-Dateien wie folgt suchen:

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

Antwort

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

Verstanden jetzt. Dieser hat einfach gut für mich gearbeitet!

+0

wird Ihnen falsche Positive geben: "Marcus", "Marco Polo", "Camarco", "Benz2315", ... – Stephan

0

findstr string1 string2 sucht nach string1 OR string2. Du brauchst UND. Wenn beide Saiten auf derselben Linie sind, ist es einfach; nur die zweite Saite im Ergebnis finden, den ersten String zu finden:

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

(beachten Sie: Sie alle buchstäblich " zu entkommen)

Um richtig zu verarbeiten es in einem for, müssen Sie einige spezielle entkommen Zeichen (| hier):

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

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

Wenn sich die Zeichenfolgen in verschiedenen Zeilen befinden (möglicherweise), müssen Sie einen anderen Ansatz verwenden (zweimaliges Analysieren der Datei; && Arbeiten als "wenn der erste String gefunden wird, dann"):

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

danke für die schnelle antwort und information! Ich werde es in meinem ursprünglichen Post aktualisieren. Außerdem muss ich meine Kopie ändern, aber ich weiß nicht wie. Und ja, beide Saiten sind auf der gleichen Linie. – Zaynqx

Verwandte Themen