ic-d
Goto Top

Batch-Copy-Filter für Dateien - Inhalt durchsuchen und selektiv per Filter(unterschiedliche IP-Adressen od. Range) in versch. verzeichnisse kopiert

Hallo zusammen,

mein erster Weg war leider zu direkt.

Ich benötige ein kleines Batch-Programm,
dass aus einem Verzeichnis die enthaltenen Dateien, die im Text eine unterschiedliche IP-Adresse
enthält, in versch. Verzeichnisse kopiert: Also einen Filter

Wenn die Datei die IP-Adresse xxx.xxx.xxx.xxx enthält,
dann soll die Datei, in Laufwerk z,y od. k kopiert werden

Ablauf:

c:\LIS-Data-Forw\ - Verzeichniss

- hier liegen ca. 100 Dateien tägl. mit o.a. Inhalt.

datei.Endung ist: *.dat(ASCII)

Ich habe z.B. 4 gemappte Laufwerke:

Der Inhalt der Dateien – alle mit der Endung *.dat- müssen durchsucht werden
Nach bestimmten IP-Adressen und dann kopiert und zugeordnet werden.

Bsp: Varianten

Haus: Variable: mögliche IP-Adresse: kopiert in verzeichniss:

KH 1-1 set kh 1-1 = 192.168.2.1 q:\
KH 1-2 SET KH 1-2 = 192.168.2.2 q:\
KH 2-1 set kh 2-1 = 112.233.2.1 m:\
KH 2-2 Set kh 2-2 = 112.233.2.2 m:\


besser altern.
Ich gebe in 4 Files(.txt) die IP-Adressen der Häuser
an und die Batch liest die Variablen aus.

Oder die IP-Adressen unterscheiden sich nur in den ersten beiden points:

H1 = 192.168.x.x
H2 = 192.161.x.x

und verwenden diese dann als Filter für die
selektive copy anweisung der dateien.


Danke!


Batch-Filter: Datei-Inhalt durchsuchen und selektiv per Filter(unterschiedliche IP-Adresse) in versch. verzeichnisse kopiert

Content-Key: 67332

Url: https://administrator.de/contentid/67332

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: TuXHunt3R
TuXHunt3R 28.08.2007 um 21:10:35 Uhr
Goto Top
Wie wärs hiermit (falls ich deinen Beitrag richtig interpretiert habe):

@echo off

find /i <Pfad Textdatei 1> "IP-Adresse"  
if errorlevel 0 (
copy /v /y <Pfad Textdatei 1> <Ziel>
goto datei2
) else (
goto datei2
)



:datei2
find /i <Pfad Textdatei 2> "IP-Adresse"  
if errorlevel 0 (
copy /v /y <Pfad Textdatei 2> <Ziel>
goto datei3
) else (
goto datei3
)


:datei3

find /i <Pfad Textdatei 3> "IP-Adresse"  
if errorlevel 0 (
copy /v /y <Pfad Textdatei 3> <Ziel>
goto end
) else (
goto end
)


:: usw.
:: usw.
:: usw.
:: usw.
:: usw.


:end


Ist nicht getestet, sollte aber laufen
Mitglied: bastla
bastla 28.08.2007 um 21:46:57 Uhr
Goto Top
Hallo IC-D!

Ich nehme an Du suchst etwas in der Art:
for /f "delims=" %i in ('findstr /m "192.168.2.1 192.168.2.2" c:\LIS-Data-Forw\*.dat') do @echo copy "%i" q:\  
Der obige One-Liner ist zum Testen von der Kommandozeile gedacht. Zur Verwendung innerhalb einer Batchdatei ist jeweils %%i zu schreiben. Das "@echo" dient dazu, den Kopierbefehl nur anzuzeigen, aber nicht auszuführen. "findstr" erlaubt auch die Angabe mehrerer, durch Leerzeichen getrennter, Suchkriterien, sodass also beide IP-Adressen in einem Durchgang überprüft werden können.
Deinen wirklich vielfältigen Beispieldaten entnehme ich zumindest folgende Grundidee: In einer Textdatei ("Zuordnung.txt") wird die Zuordnung zwischen Suchbegriff und Ziellaufwerk in der folgenden Form hinterlegt (welchen Sinn und Zweck die "Häuser" dabei haben sollen, erschließt sich mir derzeit noch nicht):
192.168.2.1=q:\
192.168.2.2=q:\
112.233.2.1=m:\
112.233.2.2=m:\
Ein Batch, um nach dem Muster der oben dargestellten Zeile daraus die gewünschten selektiven Kopieroperationen abzuleiten, könnte dann so aussehen:
@echo off & setlocal
set "Zu=D:\Zuordnung.txt"  
set "Quelle=c:\LIS-Data-Forw\*.dat"  

for /f "usebackq tokens=1,2 delims==" %%i in ("%Zu%") do (  
    for /f "delims=" %%f in ('findstr /m "%%i" "%Quelle%"') do @echo copy "%%f" "%%j"  
)
Anzumerken wäre, dass Dateien, welche mehrere der überprüften IP-Adressen enthalten, auch mehrmals kopiert werden (für jede Übereinstimmung wird ein Kopiervorgang ausgeführt).

Grüße
bastla
Mitglied: IC-D
IC-D 29.08.2007 um 00:49:01 Uhr
Goto Top
Vielen Danke !!!!

das geht gute

habe jetzt:

qcm3-lis-data-sort2.bat
@echo off & setlocal
set "Zu=C:\Zuordnung.txt"
set "Quelle=c:\test\*.dat"

for /f "usebackq tokens=1,2 delims==" %%i in ("%Zu%") do (
for /f "delims=" %%f in ('findstr /m "%%i" "%Quelle%"') do copy "%%f" "%%j"
)

@echo off


und

c:\Zuordnung.txt

172.21.179.*=c:\test2
172.21.40.*=c:\test3
172.21.50.*=c:\test4


Wie kann ich noch sagen, dass er erst alle IPs ausliest,
und die die ich nicht zuordnen kann woanderst ablegt ?

Danke nochmals allen....

LG
John
Mitglied: bastla
bastla 29.08.2007 um 02:16:26 Uhr
Goto Top
Hallo IC-D!

Wenn es genügt, alle vorher nicht kopierten Dateien als "Rest" in den Zielordner "C:\AlleAnderen" zu kopieren, etwa so (ungetestet):
@echo off & setlocal
set "Zu=C:\Zuordnung.txt"  
set "Quelle=c:\test\*.dat"  
set "Erledigt=C:\Erledigt.txt"  
set "ZielRest=C:\AlleAnderen"  

if exist "%Erledigt%" del "%Erledigt%"  
for /f "usebackq tokens=1,* delims==" %%i in ("%Zu%") do (  
    for /f "delims=" %%f in ('findstr /m /i "%%i" "%Quelle%"') do copy "%%f" "%%j">nul & echo %%f>>"%Erledigt%"  
)
for %%f in ("%Quelle%") do findstr /c:"%%f" "%Erledigt%">nul || copy "%%f" "%ZielRest%">nul  

Grüße
bastla
Mitglied: IC-D
IC-D 30.08.2007 um 12:50:50 Uhr
Goto Top
Tausen Dank an alle !!

Habe jetzt eine Datei, die alles macht !

sortieren der dateien nach IP-Range, z.B. 17.10.10.x und diese
dann backuped und in den Ordner der Schnittstelle verschiebt !!


tausen dank nochmals !!!!!

LG

Dirk

@echo off
rem wsc 06/2005
rem QCM-DATA-FW.BAT
rem script for qcm-data forward to external systems
rem Path C:\Program Files\QCM3

rem script runs as user labor (with password labor)
rem set frequency and user permissions in: Programs -> Accessories -> System Tools -> Sheduled Tasks
rem set proper acl file permission

rem qcm location: xxxxxx
rem date of activation: 12.04.05 / 14.06.05
rem remote_server: 10.10.45.2 (labor-server)
rem remote_share: qcmanager$
rem remote_optional_folder (optional): # in most cases not needed! baden-baden
rem remote_user: labor
rem remote_password: labor

rem forward qcm results from: (standard) 01.01.1999

rem copy all results to C:\LIS-DATA-ALL\
move C:\"Program Files"\QCM3\LISCom\DataForwardingDir\*.dat C:\LIS-DATA-ALL\


rem Sort the files specified by ip-adress-filter set in file c:\Zuordnung.txt

set "Zu=C:\Zuordnung.txt"
set "Quelle=C:\LIS-DATA-ALL\*.dat"

for /f "usebackq tokens=1,2 delims==" %%i in ("%Zu%") do (
for /f "delims=" %%f in ('findstr /m "%%i" "%Quelle%"') do move "%%f" "%%j"
)


rem Check if backup-protokoll-folder exist

rem check if folders LIS-Data-Baden-Baden already exist, if not creating them
if exist C:\LIS-Data-Baden-Baden\sent\ goto NEXT
md C:\LIS-Data-Baden-Baden\sent\
md C:\LIS-Data-Baden-Baden\sent\save
:NEXT

rem check if folders LIS-Data-Forbach already exist, if not creating them
if exist c:\LIS-Data-Forbach\sent\ goto NEXT
md C:\LIS-Data-Forbach\sent\
md C:\LIS-Data-Forbach\sent\save
:NEXT

rem check if folders LIS-Data-Gernsbach already exist, if not creating them
if exist c:\LIS-Data-Gernsbach\sent\ goto NEXT
md C:\LIS-Data-Gernsbach\sent\
md C:\LIS-Data-Gernsbach\sent\save
:NEXT

rem pause

rem @echo on

rem map the ISOFT-Server-Network-Drive as q:

rem - nur in home version - net use * /del /y

rem - nur in home version net use q: \\10.10.45.2\qcmanager$ /user:labor labor /persistent:no

rem copy the lis-files to specified locations and save them

move C:\LIS-Data-Baden-Baden\*.dat C:\LIS-Data-Baden-Baden\sent\
copy C:\LIS-Data-Baden-Baden\sent\*.dat q:\baden-baden\
move C:\LIS-Data-Baden-Baden\sent\*.dat C:\LIS-Data-Baden-Baden\sent\save\

move C:\LIS-Data-Forbach\*.dat C:\LIS-Data-Forbach\sent\
copy C:\LIS-Data-Forbach\sent\*.dat Q:\Forbach\
move C:\LIS-Data-Forbach\sent\*.dat C:\LIS-Data-Forbach\sent\save\

move C:\LIS-Data-Gernsbach\*.dat C:\LIS-Data-Gernsbach\sent\
copy C:\LIS-Data-Gernsbach\sent\*.dat q:\Gernsbach\
move C:\LIS-Data-Gernsbach\sent\*.dat C:\LIS-Data-Gernsbach\sent\save\

rem cut the mapped drive q:
rem - nur in home version net use * /del /y

rem pause

exit