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

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: Iwan
Iwan 24.09.2008 um 08:32:25 Uhr
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
Mitglied: bastla
bastla 24.09.2008 um 10:53:15 Uhr
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
Mitglied: ruebensau
ruebensau 24.09.2008 um 15:43:07 Uhr
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.
Mitglied: bastla
bastla 24.09.2008 um 16:23:02 Uhr
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