ruebensau
Goto Top

Attribute aus mehrern Dateien zusammenfassen

Hallo Admins,

hab hier ein glaube ich komplexere Problem und weiß eigentlich nicht ob sich das durch Batchskripting realisieren lässt.

Ich habe eine Datei mit 3 Spalten durch Kommas getrennt mit folgenden Inhalt:


12345,blabla,A12345
27989,testte,A66209


Anhand der Information des 3. Tokens suche ich die Datei innerhalb eines Ordners.
for /f "tokens=1-3 delims=," %%a in (meinedatei.txt) do (  
	call :searchexist %%a %%b %%c 
	)

goto L_END

:searchexist
for /R C:\test\ %%a in (%3.*) do (
	echo %1,%2,%3,%%~fa>>found.log

Also erhalte ich folgenden Output:
12345,blabla,A12345,c:\test\A12345.doc
12345,blabla,A12345,c:\test\A12345.ini
27989,testte,A66209,c:\test\A66209.doc
27989,testte,A66209,c:\test\A66209.ini


Der Output ist richtig so, er findet mir zu jeder doc auch eine ini.

Jetzt die Problematik:

In der ini sind Informationen, die ich auch im Output integrieren will.
Ich möchte nun aus der gefundenen ini die Zeile 3 und 19 auslesen und ins Output integrieren.

Die ini sieht folgendermaßen aus:
...
Date=20.12.1980
...
ProjectNo=06nk11924
...

Somit möchte ich folgenden Output erhalten:

12345,blabla,A12345,20.12.1980,06nk11924,c:\test\A12345.doc
12345,blabla,A12345,20.12.1980,06nk11924,c:\test\A12345.ini
27989,testte,A66209,11.10.2005,0z663451w,c:\test\A66209.doc
27989,testte,A66209,11.10.2005,0z663451w,c:\test\A66209.ini

Wie mache ich das?
Danke schonmal im voraus!

Content-Key: 97667

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

Printed on: April 23, 2024 at 17:04 o'clock

Member: Iwan
Iwan Sep 24, 2008 at 06:32:25 (UTC)
Goto Top
hallo,

ich kann dir leider nicht helfen, aber du solltest dir mal die angucken und dann deinen Beitrag nochmal bearbeiten
das macht das ganze wesentlich leichter zu lesen face-wink
Member: bastla
bastla Sep 24, 2008 at 08:53:15 (UTC)
Goto Top
Hallo rübensau!

(Ungetestet) etwa so:
@echo off & setlocal
for /f "tokens=1-3 delims=," %%a in (meinedatei.txt) do (  
    for /R C:\test\ %%f in (%%c.*) do (
	    call :GetInfoAndWrite %%a %%b %%c "%%f"  
	)

goto L_END

:GetInfoAndWrite
set Datum=
for /f "tokens=1* delims=" %%i in ('findstr /b "Date=" %4') do set "Datum=%%j"  
set Project=
for /f "tokens=1* delims=" %%i in ('findstr /b "ProjectNo=" %4') do set "Project=%%j"  
echo %1,%2,%3,%Datum%,%Project%,%~f4>>found.log
goto :eof
Vorausgesetzt wird hier, dass die entsprechenden Zeilen tatsächlich mit (exakt) "Date=" bzw "ProjectNo=" beginnen und es jeweils nur eine derartige Zeile gibt (bei mehreren Zeilen würdest du die Daten aus der letzten gefundenen Zeile erhalten).

Mit dem "findstr"-Schalter "/i" könntest Du noch vorgeben, dass bei der Suche Groß-/Kleinschreibung nicht unterschieden werden soll.

Grüße
bastla
Member: ruebensau
ruebensau Sep 24, 2008 at 13:43:07 (UTC)
Goto Top
Hab den Code ein wenig umgestellt und funktioniert jetzt auch. Vorher hatte ich irgendwie noch Endlosschleifen und mit Variablenproblemen zu kämpfen.
Thx bastla

setlocal enabledelayedexpansion

rem mawk.exe -F; -f identic.awk importvorlage_ver2.csv>identic.log

for /f "tokens=1-3 delims=;" %%a in (identic.log) do (  
	call :searchexist %%a %%b "%%c"  
	)

goto L_END

:searchexist
for /R F:\ULDokumente_Chicago\QRS_certificates %%a in (%1.*) do (
	echo %1;%2;%3;%%~fa;%%~dpa;%%~na>>found.log
	)
goto :EOF

:L_END

for /f "tokens=1-6 delims=;" %%a in (found.log) do (  
	call :SearchInFile %%a %%b %%c %%d %%e %%f
	)

goto L_END1

:SearchInFile
set Vol=
for /f "tokens=2 delims==" %%i in ('findstr /B /C:"Volume" %4') do (set "Vol=%%i")  
set Project=
for /f "tokens=2 delims==" %%i in ('findstr /B /C:"ProjectNo" %4') do (set "Project=%%i")  
echo %1;%2;%3;%Vol%;%Project%;%4>>test.log
if exist %5C%6.doc echo %1;%2;%3;%Vol%;%Project%;%5C%6.doc>>test.log
goto :EOF

:L_END1

werde noch ein wenig rumbasteln müssen, daher markiere ich den Beitrag erstmal noch nicht auf gelöst.
Member: bastla
bastla Sep 24, 2008 at 14:23:02 (UTC)
Goto Top
Hallo rübensau!

Nur als Anmerkung: Soferne Du für "found.log" nicht auch noch eine andere Verwendung hast, ist dieser Zwischenschritt eigentlich unnötig - Du könntest anstelle des "echo" in Zeile 13 gleich ein "call :SearchInFile" verwenden ...

Und noch eine Kleinigkeit: Wenn der Suchbegriff aus einem einzigen Wort besteht, ist der "findstr"-Schalter "/c" eigentlich entbehrlich.

Grüße
bastla