gelöst Logfile letzten Zeilen in Txt File mit Batch
keksprinz (Level 2) - Jetzt verbinden
26.07.2005, aktualisiert 09.05.2008, 24308 Aufrufe, 21 Kommentare
Hallo,
ich habe ein Text Logfile, welches ich mit robocopy erstelle. Am ende dieses Logfieles steht eine Zusammenfassung, immer in den letzten 10 Zeilen.
Wie kann ich mit einer Batchfile diese 10 Zeilen in ein anderes Textfile kopieren.
Das Logfile kann unterschiedlich lang sein, deshalb komme ich mit Zeilenangaben nicht weiter.
Danke
Keksprinz
ich habe ein Text Logfile, welches ich mit robocopy erstelle. Am ende dieses Logfieles steht eine Zusammenfassung, immer in den letzten 10 Zeilen.
Wie kann ich mit einer Batchfile diese 10 Zeilen in ein anderes Textfile kopieren.
Das Logfile kann unterschiedlich lang sein, deshalb komme ich mit Zeilenangaben nicht weiter.
Danke
Keksprinz
21 Antworten
- LÖSUNG Biber schreibt am 26.07.2005 um 14:45:35 Uhr
- LÖSUNG 57214 schreibt am 19.11.2007 um 23:25:30 Uhr
- LÖSUNG gemini schreibt am 26.07.2005 um 14:47:59 Uhr
- LÖSUNG Biber schreibt am 26.07.2005 um 17:22:23 Uhr
- LÖSUNG keksprinz schreibt am 03.08.2005 um 10:55:52 Uhr
- LÖSUNG Biber schreibt am 03.08.2005 um 11:01:32 Uhr
- LÖSUNG keksprinz schreibt am 03.08.2005 um 10:55:52 Uhr
- LÖSUNG Oli-nux schreibt am 17.08.2005 um 22:01:14 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 00:36:27 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 12:03:51 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 16:05:45 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 16:30:30 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 19:30:14 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 21:58:17 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 11:10:02 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 11:40:40 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 13:17:43 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 14:35:23 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 15:40:05 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 16:41:51 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 17:28:18 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 20:05:44 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 17:28:18 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 16:41:51 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 15:40:05 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 14:35:23 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 13:17:43 Uhr
- LÖSUNG Biber schreibt am 09.05.2008 um 11:40:40 Uhr
- LÖSUNG jhe1960 schreibt am 09.05.2008 um 11:10:02 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 21:58:17 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 19:30:14 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 16:30:30 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 16:05:45 Uhr
- LÖSUNG Oli-nux schreibt am 18.08.2005 um 12:03:51 Uhr
- LÖSUNG Biber schreibt am 18.08.2005 um 00:36:27 Uhr
LÖSUNG 26.07.2005 um 14:45 Uhr
...aber die Zusammenfassung fängt doch immer mit einem bestimmten Text an?
Wäre jedenfalls meine Strategie, ab einer bestimmten Zeile (Kriterium "Suchtext") den Rest zu lesen/anzuzeigen. Und zwar mit der Mimik, die hier steht: IP Adresse als Systemvariable speichern (die Lösung mit "find" und "more" von stupsnose)
Andernfalls gibt es für Windows auch ein paar Unix-like Freeware-Utilities a la head/footer, die jeweils die ersten/letzten n Zeilen anzeigen können.
Frank /der Biber aus Bremen
Wäre jedenfalls meine Strategie, ab einer bestimmten Zeile (Kriterium "Suchtext") den Rest zu lesen/anzuzeigen. Und zwar mit der Mimik, die hier steht: IP Adresse als Systemvariable speichern (die Lösung mit "find" und "more" von stupsnose)
Andernfalls gibt es für Windows auch ein paar Unix-like Freeware-Utilities a la head/footer, die jeweils die ersten/letzten n Zeilen anzeigen können.
Frank /der Biber aus Bremen
LÖSUNG 26.07.2005 um 14:47 Uhr
Also bei mir wären das 11 Zeilen zum auslesen, da Robocopy am Ende eine Leerzeile anfügt.
Schreiben kann ich jetzt nichts, muss nebenher auch noch was arbeiten
Darum nur mal ein möglicher Ansatz für ein VBScript.
Das Log mit ReadLine zeilenweise in eine Variable lesen und einen Zähler mitlaufen lassen.
Danach alle Zeilen in eine weitere Variable schreiben, die > Zähler - 11 sind.
Zweites Log ForAppending öffnen und die zweite Variable reinschreiben.
Wie gesagt noch nicht ausgegoren aber sollte funktionieren.
Schreiben kann ich jetzt nichts, muss nebenher auch noch was arbeiten
Darum nur mal ein möglicher Ansatz für ein VBScript.
Das Log mit ReadLine zeilenweise in eine Variable lesen und einen Zähler mitlaufen lassen.
Danach alle Zeilen in eine weitere Variable schreiben, die > Zähler - 11 sind.
Zweites Log ForAppending öffnen und die zweite Variable reinschreiben.
Wie gesagt noch nicht ausgegoren aber sollte funktionieren.
LÖSUNG 26.07.2005 um 17:22 Uhr
Okay, keksprinz,
anbei kurze Skizze als Batchdatei. Sind im wesentlichen drei Zeilen.
Ich habe eine englische Robycoby-Version, die die Summary so einleitet:
"Total Copied Skipped Mismatch FAILED Extras"
Wenn die LogDatei also Robocopy.log hieße ("robocopy von nach [parameter] /Log:robocopy.log"), dann:
- schreibt die erste der grünen Zeilen die Zeilennummer der gesuchten Zeile und ein bisschen Beiwerk weg ( [234] ...)
- in der zweiten Zeile wird die Zeilennummer der Variablen %rczeile% zugewiesen
- in der dritten Zeile zeigt "more" alles ab dieser Zeile an (und läßt sich umleiten)
Hope That Helps
Frank /der Biber aus Bremen
P.S. Würde ich auch als Einzeiler hinbekommen, aber das erspar ich uns
anbei kurze Skizze als Batchdatei. Sind im wesentlichen drei Zeilen.
Ich habe eine englische Robycoby-Version, die die Summary so einleitet:
"Total Copied Skipped Mismatch FAILED Extras"
Wenn die LogDatei also Robocopy.log hieße ("robocopy von nach [parameter] /Log:robocopy.log"), dann:
- schreibt die erste der grünen Zeilen die Zeilennummer der gesuchten Zeile und ein bisschen Beiwerk weg ( [234] ...)
- in der zweiten Zeile wird die Zeilennummer der Variablen %rczeile% zugewiesen
- in der dritten Zeile zeigt "more" alles ab dieser Zeile an (und läßt sich umleiten)
01.
::::::::::::::::::::-------Robologsummary.bat
02.
@echo off
03.
::..ggf mit Parameter [logdatei] aufrufen.
04.
if (%1)==() (set rclog=robocopy.log) else (set rclog=%1)
05.
find /n "Total Copied Skipped Mismatch FAILED Extras" %rclog% >%temp%\rctmp.txt
06.
for /F "delims=[] skip=2 tokens=1" %%a in ( %temp%\rctmp.txt) do Set /a rcZeile=%%a - 1
07.
more +%rcZeile% %rclog%
08.
:: und den more-Output ggf in eine neue Datei mit
09.
::.... echo Robocopy-Summary vom %date%: >>neueDatei
10.
::.... more +%rcZeile% %rclog% >>neueDatei
11.
::::::::::::::::::---------- EndeRobologsummary.bat
Frank /der Biber aus Bremen
P.S. Würde ich auch als Einzeiler hinbekommen, aber das erspar ich uns
LÖSUNG 03.08.2005 um 10:55 Uhr
Viel Dank für deine antwort,
es funktioniert super
es funktioniert super
LÖSUNG 03.08.2005 um 11:01 Uhr
Freut mich und ebenfalls danke für die Rückmeldung.
LÖSUNG 17.08.2005 um 22:01 Uhr
Ich könnte so ne Batch-Datei auch brauchen.
Allerdings ist mein Inhalt in der *.txt ab der 2. Zeile immer anders.
Ich kann auch nicht sagen, wieviel Zeilen die *.txt im Endeffekt hat, das ist immer unterschiedlich (neue Benutzer kommen hinzu oder werden gelöscht).
Wäre aber super, wenn es ne Batch-Datei geben würde, die mir die 1. Zeile und sagen wir die nächsten 10 Zeilen in eine neue *.txt speichert und zwar aufsteigend.
Also sagen wir die *.txt heisst bla.txt mit Inhalt "Benutzer" und den Buchstaben A bis Z und darunter die Namen wie Arnold bis Zyklop, dann sollen die ersten 10 Buchstaben/Namen samt "Benutzer" in eine neue *.txt gespeichert werden, die sich dann bla.txt-1 nennt und das halt mit allen Buchstaben/Namen die in der *.txt stehen.
Nochmal zur Veranschaulichung (das enthält die bla.txt):
Zeile 1: Benutzer
Zeile 2: A
Zeile 3: Anton
Zeile 4: Arnold
Zeile 5: B
Zeile 6: Berta
Zeile ..............
........
usw.
Ende der Benutzer!
Jetzt soll der die 1. Zeile "Benutzer" und die nächsten 10 Zeilen in eine neue *.txt kopieren und diese bla-1.txt nennen, dann wieder die 1. Zeile "Benutzer" und die nächsten 10 Zeilen, die Datei heisst dann bla-2.txt usw.
Ich hoffe mir kann da jemand was vernünftiges schreiben.
Allerdings ist mein Inhalt in der *.txt ab der 2. Zeile immer anders.
Ich kann auch nicht sagen, wieviel Zeilen die *.txt im Endeffekt hat, das ist immer unterschiedlich (neue Benutzer kommen hinzu oder werden gelöscht).
Wäre aber super, wenn es ne Batch-Datei geben würde, die mir die 1. Zeile und sagen wir die nächsten 10 Zeilen in eine neue *.txt speichert und zwar aufsteigend.
Also sagen wir die *.txt heisst bla.txt mit Inhalt "Benutzer" und den Buchstaben A bis Z und darunter die Namen wie Arnold bis Zyklop, dann sollen die ersten 10 Buchstaben/Namen samt "Benutzer" in eine neue *.txt gespeichert werden, die sich dann bla.txt-1 nennt und das halt mit allen Buchstaben/Namen die in der *.txt stehen.
Nochmal zur Veranschaulichung (das enthält die bla.txt):
Zeile 1: Benutzer
Zeile 2: A
Zeile 3: Anton
Zeile 4: Arnold
Zeile 5: B
Zeile 6: Berta
Zeile ..............
........
usw.
Ende der Benutzer!
Jetzt soll der die 1. Zeile "Benutzer" und die nächsten 10 Zeilen in eine neue *.txt kopieren und diese bla-1.txt nennen, dann wieder die 1. Zeile "Benutzer" und die nächsten 10 Zeilen, die Datei heisst dann bla-2.txt usw.
Ich hoffe mir kann da jemand was vernünftiges schreiben.
LÖSUNG 18.08.2005 um 00:36 Uhr
Na, Oli-nux,
ob vernünftig, weiß ich nicht... aber was schnell zusammengeschreddertes kann ich anbieten. Obwohl Dein Problem ja soviel mit Zeilen ans LogFile anhängen zu tun wie Bätcheln mit Programmieren..*gg
Aber egal, unter diesem Thread liest dann halt keiner außer uns beiden mit.
Wäre mir aber auch schwer gefallen, eine passende Überschrift zu finden.
Ich hoffe, ich hab Dich halbwegs richtig verstanden... bei mir werden aus dem Input ("bla.txt" )
solange Häppchen-Dateien "bla-1.txt", "bla-2.txt",usw gemacht wie noch User in der Bla.txt sind. Und ein bisschen überflüssiger Debugtext, damit man/frau was sieht.
Also Inputdatei "bla.txt"
Und das ist die
splitbla.txt mit all ihren vielen Zeilen..*gg
(Variable blafile ist nur zum besseren Lesen da, ist natürlich überflüssig.)
War es das in etwa, was Du meintest?
Frank / der Biber aus Bremen
ob vernünftig, weiß ich nicht... aber was schnell zusammengeschreddertes kann ich anbieten. Obwohl Dein Problem ja soviel mit Zeilen ans LogFile anhängen zu tun wie Bätcheln mit Programmieren..*gg
Aber egal, unter diesem Thread liest dann halt keiner außer uns beiden mit.
Wäre mir aber auch schwer gefallen, eine passende Überschrift zu finden.
Ich hoffe, ich hab Dich halbwegs richtig verstanden... bei mir werden aus dem Input ("bla.txt" )
solange Häppchen-Dateien "bla-1.txt", "bla-2.txt",usw gemacht wie noch User in der Bla.txt sind. Und ein bisschen überflüssiger Debugtext, damit man/frau was sieht.
Also Inputdatei "bla.txt"
01.
Benutzer
02.
AAA
03.
AAB......erster
04.
Aachen....zweiter FILE: bla-5.txt LN :2 Text:
05.
Adele FILE: bla-5.txt LN :3 Text:
06.
Aerosmith
07.
Afk,
08.
Agnes
09.
Ahnungslos
10.
Aida
11.
Ajax
12.
Akazia
13.
Alter Schwede
14.
Am
15.
AMMO+
16.
AMMOMEGAPACK++
17.
AMMOSUPERMEGAMEGAPACK
18.
Anna
19.
Antje
20.
Anus
21.
Aorta
22.
April
23.
Aqua
24.
Aries
25.
As is it is et jut
26.
Astoria die Berlinerin
27.
Astrid die Schwäbin
28.
Attention
29.
Au weia
30.
Avignon
31.
Awsome
32.
Axa
33.
Ayayay
34.
Azalee die Rote
35.
Babsi die Blonde
36.
Baby Balla
37.
Babylon Barney
38.
Barney G.
39.
----ende bla.txt ...beginn erzeugte bla-1.txt
40.
Benutzer
41.
FILE: bla-1.txt LN :2 Text: AAA
42.
FILE: bla-1.txt LN :3 Text: AAB......erster
43.
FILE: bla-1.txt LN :4 Text: Aachen....zweiter FILE: bla-5.txt LN :2 Text:
44.
FILE: bla-1.txt LN :5 Text: Adele FILE: bla-5.txt LN :3 Text:
45.
FILE: bla-1.txt LN :6 Text: Aerosmith
46.
FILE: bla-1.txt LN :7 Text: Afk,
47.
FILE: bla-1.txt LN :8 Text: Agnes
48.
FILE: bla-1.txt LN :9 Text: Ahnungslos
49.
FILE: bla-1.txt LN :10 Text: Aida
50.
51.
---- beginn erzeugte bla-2.txt
52.
Benutzer
53.
FILE: bla-2.txt LN :2 Text: Ajax
54.
FILE: bla-2.txt LN :3 Text: Akazia
55.
FILE: bla-2.txt LN :4 Text: Alter Schwede
56.
FILE: bla-2.txt LN :5 Text: Am
57.
FILE: bla-2.txt LN :6 Text: AMMO+
58.
FILE: bla-2.txt LN :7 Text: AMMOMEGAPACK++
59.
FILE: bla-2.txt LN :8 Text: AMMOSUPERMEGAMEGAPACK
60.
FILE: bla-2.txt LN :9 Text: Anna
61.
FILE: bla-2.txt LN :10 Text: Antje
62.
---- beginn erzeugte bla-3.txt
63.
Benutzer
64.
FILE: bla-3.txt LN :2 Text: Anus
65.
FILE: bla-3.txt LN :3 Text: Aorta
66.
FILE: bla-3.txt LN :4 Text: April
67.
FILE: bla-3.txt LN :5 Text: Aqua
68.
FILE: bla-3.txt LN :6 Text: Aries
69.
FILE: bla-3.txt LN :7 Text: As is it is et jut
70.
FILE: bla-3.txt LN :8 Text: Astoria die Berlinerin
71.
FILE: bla-3.txt LN :9 Text: Astrid die Schwäbin
72.
FILE: bla-3.txt LN :10 Text: Attention
73.
----beginn erzeugte bla-4.txt
74.
Benutzer
75.
FILE: bla-4.txt LN :2 Text: Au weia
76.
FILE: bla-4.txt LN :3 Text: Avignon
77.
FILE: bla-4.txt LN :4 Text: Awsome
78.
FILE: bla-4.txt LN :5 Text: Axa
79.
FILE: bla-4.txt LN :6 Text: Ayayay
80.
FILE: bla-4.txt LN :7 Text: Azalee die Rote
81.
FILE: bla-4.txt LN :8 Text: Babsi die Blonde
82.
FILE: bla-4.txt LN :9 Text: Baby Balla
83.
FILE: bla-4.txt LN :10 Text: Babylon Barney
84.
-------- beginn erzeugte bla-5.txt
85.
Benutzer
86.
FILE: bla-5.txt LN :2 Text: Barney G.
01.
@echo off
02.
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof
03.
if not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof
04.
setlocal
05.
set blafile=%1
06.
type %blafile% |find /i "Benutzer" >%temp%\Headline.Txt
07.
(set /a cntLn=0 ) && REM Zeilenzähler
08.
(set /a MaxLnsPerFile=10) && REM Max. Zeilen je Splitdatei, eigentlich Konstante
09.
(set /a FileCnt=1 ) && REM Zähler für die Splitdateien
10.
(Set Dirty=TRUE ) && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?
11.
if exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul
12.
for /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"
13.
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1
14.
goto :eof
15.
---------hier Ende der Welt
16.
:WriteTmp
17.
Set /a cntln=%cntln%+1
18.
IF %cntln% GTR 1 (
19.
echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
20.
SET Dirty=TRUE
21.
If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1 )
22.
goto :eof
23.
------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife
24.
:WriteFinal
25.
Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
26.
(SET Dirty=FALSE) & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)
27.
goto :eof
(Variable blafile ist nur zum besseren Lesen da, ist natürlich überflüssig.)
War es das in etwa, was Du meintest?
Frank / der Biber aus Bremen
LÖSUNG 18.08.2005 um 12:03 Uhr
@Biber
Ich glaube du hast schon richtig verstanden was ich wollte.
Das Script funktioniert prima.
Schon mal Danke dafür.
Allerdings möchte ich, dass folgendes nicht in den gesplitteten Text-Files enthalten ist:
FILE: benutzer-1.txt LN :2 Text:
Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
Sonst muss ich pro Text-File ja noch mit dem "Ersetzen" arbeiten.
Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
Alles andere ist schon ganz richtig so.
Also sieht die benutzer-1.txt zum Schluß (bzw. so soll sie aussehen) so aus:
A
Andre
Arnold
B
Berta
C
Carolin
D
Dieter
Oder wenn das mit der Ersten und Letzten Zeile nicht geht, dass du noch nen script machst, welches in allen erzeugten bla-files (bla-1.txt, bla-2.txt etc.) mir folgendes löscht:
FILE: benutzer-1.txt LN :2 Text:
Denke aber, das man dies doch im Script umschreiben könnte.
Ich glaube du hast schon richtig verstanden was ich wollte.
Das Script funktioniert prima.
Schon mal Danke dafür.
Allerdings möchte ich, dass folgendes nicht in den gesplitteten Text-Files enthalten ist:
FILE: benutzer-1.txt LN :2 Text:
Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
Sonst muss ich pro Text-File ja noch mit dem "Ersetzen" arbeiten.
Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
Alles andere ist schon ganz richtig so.
Also sieht die benutzer-1.txt zum Schluß (bzw. so soll sie aussehen) so aus:
A
Andre
Arnold
B
Berta
C
Carolin
D
Dieter
Oder wenn das mit der Ersten und Letzten Zeile nicht geht, dass du noch nen script machst, welches in allen erzeugten bla-files (bla-1.txt, bla-2.txt etc.) mir folgendes löscht:
FILE: benutzer-1.txt LN :2 Text:
Denke aber, das man dies doch im Script umschreiben könnte.
LÖSUNG 18.08.2005 um 16:05 Uhr
Okay, Oli-Nux,
hab ich teilweise verstanden...
echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
Ändere die um in die "Produktiv-Zeile"
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp ...fertig.
>Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
Okay. Ist das eine Zusatzfunktionalilät? Oder sind die Einzelbuchstaben "A", "B"... usw. schon in der Quelldatei als Einzelzeilen? Ider sollen die erst für die Outputdateien generiert werden? ..ich schau mal gleich nach Deiner Antwort, ehe ich was ändere.
>Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
Verstanden: Die erste Zeile (in dem Beispiel die Zeile "Benutzer") wird übernommen.
Nicht verstanden: "die letzte Zeile ..übernehmen " ????? Hä? Wo? Wohin? Wozu?
Gespannt wartend
Biber
hab ich teilweise verstanden...
Allerdings möchte ich, dass folgendes nicht in den gesplitteten Text-Files enthalten ist:
FILE: benutzer-1.txt LN :2 Text:
Das ist ja nur die bisherige Debug-Display-Zeile:FILE: benutzer-1.txt LN :2 Text:
echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
Ändere die um in die "Produktiv-Zeile"
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp ...fertig.
>Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
Okay. Ist das eine Zusatzfunktionalilät? Oder sind die Einzelbuchstaben "A", "B"... usw. schon in der Quelldatei als Einzelzeilen? Ider sollen die erst für die Outputdateien generiert werden? ..ich schau mal gleich nach Deiner Antwort, ehe ich was ändere.
>Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
Verstanden: Die erste Zeile (in dem Beispiel die Zeile "Benutzer") wird übernommen.
Nicht verstanden: "die letzte Zeile ..übernehmen " ????? Hä? Wo? Wohin? Wozu?
Gespannt wartend
Biber
LÖSUNG 18.08.2005 um 16:30 Uhr
>Allerdings möchte ich, dass folgendes nicht in den gesplitteten Text-Files enthalten ist:
>FILE: benutzer-1.txt LN :2 Text:
Das ist ja nur die bisherige Debig-Display-Zeile:
echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
Ändere die um in die "Produktiv-Zeile"
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp ...fertig.
\Hab ich gemacht und nun ist es genau so, wie ich es wollte.
>Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
>>Okay. ist das eine Zusatzfunktionalilät? Oder sind die Einzelbuchstaben "A", "B"... usw. schon in der Quelldatei als Einzelzeilen? Ider sollen die erst für die Outputdateien generiert werden?
\Ne, ich glaub das passt schon hab das nochmal überprüft.
\Es soll bei den gesplitteten Files aber wie in der Original bla.txt auch in der ersten Zeile "Benutzer" stehen und in der Letzten "Benutzer-Ende". Er soll also immer die erste und letzte Zeile (egal was da steht) in die gesplitteten übernehmen.
>Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
>>Verstanden: Die erste Zeile (in dem Beispiel die Zeile "Benutzer") wird übernommen.
Nicht verstanden: "die letzte Zeile ..übernehmen " ????? Hä? Wo? Wohin? Wozu?
\In der Letzten Zeile steht z.b. "Benuter-Ende" und das soll auch übernommen werden.
\Ich kann dir allerdings nicht sagen in welcher Zeile (sich die letzte Zeile befindet), denn das kommt immer drauf an, wieviel Benutzer in der Original bla.txt gelistet sind.
PS: Wie lernt man sowas zu schreiben?
>FILE: benutzer-1.txt LN :2 Text:
Das ist ja nur die bisherige Debig-Display-Zeile:
echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
Ändere die um in die "Produktiv-Zeile"
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp ...fertig.
\Hab ich gemacht und nun ist es genau so, wie ich es wollte.
>Sondern eben nur für das file benutzer-1.txt die Anfangsbuchstaben also A bis D und darunter jeweils die Benutzernamen.
>>Okay. ist das eine Zusatzfunktionalilät? Oder sind die Einzelbuchstaben "A", "B"... usw. schon in der Quelldatei als Einzelzeilen? Ider sollen die erst für die Outputdateien generiert werden?
\Ne, ich glaub das passt schon hab das nochmal überprüft.
\Es soll bei den gesplitteten Files aber wie in der Original bla.txt auch in der ersten Zeile "Benutzer" stehen und in der Letzten "Benutzer-Ende". Er soll also immer die erste und letzte Zeile (egal was da steht) in die gesplitteten übernehmen.
>Wenn möglich auch noch die Erste und Letzte Zeile der Original bla.txt in jede nummerierte (bla-1.txt, bla-2.txt etc.) übernehmen.
>>Verstanden: Die erste Zeile (in dem Beispiel die Zeile "Benutzer") wird übernommen.
Nicht verstanden: "die letzte Zeile ..übernehmen " ????? Hä? Wo? Wohin? Wozu?
\In der Letzten Zeile steht z.b. "Benuter-Ende" und das soll auch übernommen werden.
\Ich kann dir allerdings nicht sagen in welcher Zeile (sich die letzte Zeile befindet), denn das kommt immer drauf an, wieviel Benutzer in der Original bla.txt gelistet sind.
PS: Wie lernt man sowas zu schreiben?
LÖSUNG 18.08.2005 um 19:30 Uhr
Okay, Oli_Nux,
wenns weiter nichts ist..
Ich leg mal die ge-"NumberMe"-te SplitBla.txt bei.
("NumberMe.bat" siehe Workshop Batch for Runaways - Part 2 Ein bisschen Handwerkszeug)
Meine "Bla.txt" hab ich so verändert:
Output z.B. von Bla-4.txt:
Wie Du siehst, gehen eventuelle Umlaute kaputt, d.h. ich müsste, falls tatsächlich Umlaute in der bla.txt drin wären, diese maskieren. Auch kein Problem, aber dass wollte ich im Part 3 des Batch-Workshops machen. Oder in einem anderen Thread. Oder in einem anderen Leben.
HTH Frank / der Biber aus Bremen
P.S.: >PS: Wie lernt man sowas zu schreiben?
Mögliche Antworten:
a) in Hogwarts?
b) By Doing?
c) in meinem Batch-Workshop?
P.P.S. Natürlich habe ich mir auch eine "DeNumberMe.bat" geschrieben, falls hier oder in einem anderen Forum mal irgendeine Pappnase Sourcecode mit Zeilennummern postet. *lacht*
wenns weiter nichts ist..
Ich leg mal die ge-"NumberMe"-te SplitBla.txt bei.
("NumberMe.bat" siehe Workshop Batch for Runaways - Part 2 Ein bisschen Handwerkszeug)
01.
01 ::-----snipp Splitbla.bat Vers. 0.2----
02.
02 @echo off
03.
03 IF (%1)==() (echo Syntax %0 inputfile) & goto :eof
04.
04 if not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof
05.
05 setlocal
06.
06 (set blafile=%1) & (set FirstLine=) & (set LastLine=)
07.
07 for /f "delims=" %%i in ('type bla.txt') do if not defined firstline set firstline=%%i
08.
08 for /f "delims=" %%i in ('type bla.txt') do set lastline=%%i
09.
09 echo %firstline% >%temp%\Headline.Txt
10.
10 :: type %blafile% |find /i "Benutzer" >%temp%\Headline.Txt
11.
11 (set /a cntLn=0 ) && REM Zeilenzähler
12.
12 (set /a MaxLnsPerFile=10) && REM Max. Zeilen je Splitdatei, eigentlich Konstante
13.
13 (set /a FileCnt=1 ) && REM Zähler für die Splitdateien
14.
14 (Set Dirty=TRUE ) && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?
15.
15 if exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul
16.
16 for /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"
17.
17 IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1
18.
18 echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.
19.
19 goto :eof
20.
20 ---------hier Ende der Welt
21.
21 :WriteTmp
22.
22 Set /a cntln=%cntln%+1
23.
23 IF %cntln% GTR 1 (
24.
24 :: echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
25.
25 echo %~2>>%temp%\tmpbla-%FileCnt%.tmp
26.
26 SET Dirty=TRUE
27.
27 If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1 )
28.
28 goto :eof
29.
29 ------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife
30.
30 :WriteFinal
31.
31 echo %LastLine% >>"%temp%\tmpbla-%FileCnt%.tmp"
32.
32 Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
33.
33 (SET Dirty=FALSE) & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)
34.
34 goto :eof
35.
35 ::-----snapp Splitbla.bat Vers. 0.2----
01.
-- Anfang Benutzer-Liste vom 13.Frühling--
02.
AAA
03.
AAB......erster
04.
....
05.
...
06.
Babylon Barney
07.
Barney G.
08.
-- Ende Benutzer-Liste vom 13.Frühling--
09.
(Ende Bla.txt)
01.
D:\temp>
02.
>type bla-4.txt
03.
-- Anfang Benutzer-Liste vom 13.Fr³hling--
04.
Au weia
05.
Avignon
06.
Awsome
07.
Axa
08.
Ayayay
09.
Azalee die Rote
10.
Babsi die Blonde
11.
Baby Balla
12.
Babylon Barney
13.
-- Ende Benutzer-Liste vom 13.Fr³hling--
HTH Frank / der Biber aus Bremen
P.S.: >PS: Wie lernt man sowas zu schreiben?
Mögliche Antworten:
a) in Hogwarts?
b) By Doing?
c) in meinem Batch-Workshop?
P.P.S. Natürlich habe ich mir auch eine "DeNumberMe.bat" geschrieben, falls hier oder in einem anderen Forum mal irgendeine Pappnase Sourcecode mit Zeilennummern postet. *lacht*
LÖSUNG 18.08.2005 um 21:58 Uhr
War Essen (außer Haus) deshalb antworte ich erst jetzt.
Nee Umlaute kommen in meiner *.txt nie vor.
PS: >PS: Wie lernt man sowas zu schreiben?
>>Mögliche Antworten:
>>a) in Hogwarts?
>>b) By Doing?
>>c) in meinem Batch-Workshop?
\a) Harry Potter ^^
\b) Wenn man es kann (learning bei doing)
\c) Muss ich mir mal anschaun.
Nochmal danke bis hierher.
Nee Umlaute kommen in meiner *.txt nie vor.
PS: >PS: Wie lernt man sowas zu schreiben?
>>Mögliche Antworten:
>>a) in Hogwarts?
>>b) By Doing?
>>c) in meinem Batch-Workshop?
\a) Harry Potter ^^
\b) Wenn man es kann (learning bei doing)
\c) Muss ich mir mal anschaun.
Nochmal danke bis hierher.
LÖSUNG 19.11.2007 um 23:25 Uhr
Hey,
du kannst hier relativ viel über die LogParameter von robocopy steuern, die du einfach im robocopy batchjob mit angibst. (s.u.)
Ich denke das löst das Problem zu 100 Prozent. wenn du mal ne Beispielzeile brauchst, dann sag mir kurz Bescheid, dann poste ich hier mal meinen Code
Grüße
Johannes
/NDL Turns off logging of directory names. Full file pathnames (as
opposed to simple file names) will be shown if /NDL is used.
/NFL Turns off logging of file names. File names are still shown,
however, if file copy errors occur.
/NJH Turns of logging of the job header.
/NJS Turns off logging of the job summary.
/NP Turns off copy progress indicator (% copied).
/ETA Shows estimated time of completion for copied files.
/LOG:file Redirects output to the specified file, overwriting the file if it
already exists.
/LOG+:file Redirects output to the specified file, appending it to the file if it
already exists.
/TEE Displays output in the console window, in addition to directing
it to the log file specified by /LOG or /LOG+.
du kannst hier relativ viel über die LogParameter von robocopy steuern, die du einfach im robocopy batchjob mit angibst. (s.u.)
Ich denke das löst das Problem zu 100 Prozent. wenn du mal ne Beispielzeile brauchst, dann sag mir kurz Bescheid, dann poste ich hier mal meinen Code
Grüße
Johannes
/NDL Turns off logging of directory names. Full file pathnames (as
opposed to simple file names) will be shown if /NDL is used.
/NFL Turns off logging of file names. File names are still shown,
however, if file copy errors occur.
/NJH Turns of logging of the job header.
/NJS Turns off logging of the job summary.
/NP Turns off copy progress indicator (% copied).
/ETA Shows estimated time of completion for copied files.
/LOG:file Redirects output to the specified file, overwriting the file if it
already exists.
/LOG+:file Redirects output to the specified file, appending it to the file if it
already exists.
/TEE Displays output in the console window, in addition to directing
it to the log file specified by /LOG or /LOG+.
LÖSUNG 09.05.2008 um 11:10 Uhr
Moin Forum,
sorry, dass ich den alten Thread hier rauskrame, aber ich wollte wegen meinem Problemchen keinen neuen aufmachen...
@ Biber
ich hab mir mal das Script rauskopiert und versucht an meine Belange anzupassen.
Ich habe eine Augangsdatei, die aus beliebig vielen Zeilen besteht. Diese Datei soll in Files zu je max. 500 Zeilen gesplittet werden. Ich habe keine Überschriften etc. in der Ausgangsdatei.
Es funktioniert auch so weit ganz gut. Einziges Problem, meine Ursprungsdatei hat z.B. 1300 Zeilen. Diese wird gesplittet in 2 Files zu je 500 Zeilen. Auch noch prima. Nur, die restlichen 300 Zeilen werden einfach ignoriert und nicht in eine Splitdatei geschrieben.
Konkret:
Es werden in die Datei test1.txt die Zeilen 2 bis 500 (Zeile 1 wird nicht übernommen???), plus die letzte Zeile aus der Ursprungsdatei (test.txt) geschrieben.
In die Datei test2.txt werden die Zeilen 501 bis 999 plus die letzte Zeile aus der Ursprungsdatei (test.txt) geschrieben.
Die Zeilen von 1000 bis 1300 (bis auf die letzte Zeile, die ja in beide Files als letzte Zeile übernommen wird???) werden ignoriert.
Hier noch mal das Script:
Wäre echt nett, wenn Du mir da auf die Sprünge helfen könntest...
Gruß
jhe
sorry, dass ich den alten Thread hier rauskrame, aber ich wollte wegen meinem Problemchen keinen neuen aufmachen...
@ Biber
ich hab mir mal das Script rauskopiert und versucht an meine Belange anzupassen.
Ich habe eine Augangsdatei, die aus beliebig vielen Zeilen besteht. Diese Datei soll in Files zu je max. 500 Zeilen gesplittet werden. Ich habe keine Überschriften etc. in der Ausgangsdatei.
Es funktioniert auch so weit ganz gut. Einziges Problem, meine Ursprungsdatei hat z.B. 1300 Zeilen. Diese wird gesplittet in 2 Files zu je 500 Zeilen. Auch noch prima. Nur, die restlichen 300 Zeilen werden einfach ignoriert und nicht in eine Splitdatei geschrieben.
Konkret:
Es werden in die Datei test1.txt die Zeilen 2 bis 500 (Zeile 1 wird nicht übernommen???), plus die letzte Zeile aus der Ursprungsdatei (test.txt) geschrieben.
In die Datei test2.txt werden die Zeilen 501 bis 999 plus die letzte Zeile aus der Ursprungsdatei (test.txt) geschrieben.
Die Zeilen von 1000 bis 1300 (bis auf die letzte Zeile, die ja in beide Files als letzte Zeile übernommen wird???) werden ignoriert.
Hier noch mal das Script:
01.
::-----snipp Splitbla.bat Vers. 0.2----
02.
@echo off
03.
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof
04.
if not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof
05.
setlocal
06.
(set blafile=%1) & (set FirstLine=) & (set LastLine=)
07.
for /f "delims=" %%i in ('type test.txt') do if not defined firstline set firstline=%%i
08.
for /f "delims=" %%i in ('type test.txt') do set lastline=%%i
09.
(set /a cntLn=0 ) && REM Zeilenzähler
10.
(set /a MaxLnsPerFile=500) && REM Max. Zeilen je Splitdatei, eigentlich Konstante
11.
(set /a FileCnt=1 ) && REM Zähler für die Splitdateien
12.
(Set Dirty=TRUE ) && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?
13.
if exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul
14.
for /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"
15.
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1
16.
echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.
17.
goto :eof
18.
---------hier Ende der Welt
19.
:WriteTmp
20.
Set /a cntln=%cntln%+1
21.
IF %cntln% GTR 1 (
22.
:: echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
23.
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp
24.
SET Dirty=TRUE
25.
If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1 )
26.
goto :eof
27.
------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife
28.
:WriteFinal
29.
echo %LastLine% >>"%temp%\tmpbla-%FileCnt%.tmp"
30.
Copy /b "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
31.
(SET Dirty=FALSE) & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)
32.
goto :eof
33.
::-----snapp Splitbla.bat Vers. 0.2----
Gruß
jhe
LÖSUNG 09.05.2008 um 11:40 Uhr
Moin jhe,
ja, ja.... solche Jugendsünden holen einen immer wieder ein...
Diese 0.2er-Version enthält in der Tat einige Zeilen, die ich heute anders schreiben würde, und eine davon verursacht IMHO auch den Bug.
Im Quelltext, den Du gepostest hast und den ich mir mit copy&paste kopiert habe steht eine Zeile...
Dieser Vergleich geht in die Grütze, weil in der oberen Zeile in Wirklichkeit steht:
Bitte ändere derartige SET-Zeilen gemäß dieser Vorlage:
Und dann starte nochmal.
Grüße
Biber
sorry, dass ich den alten Thread hier rauskrame
ja, ja.... solche Jugendsünden holen einen immer wieder ein...
Diese 0.2er-Version enthält in der Tat einige Zeilen, die ich heute anders schreiben würde, und eine davon verursacht IMHO auch den Bug.
Im Quelltext, den Du gepostest hast und den ich mir mit copy&paste kopiert habe steht eine Zeile...
01.
...
02.
SET Dirty=TRUE
03.
04.
::-... und später:
05.
06.
IF "%dirty%=="TRUE" call:...Whatever
SET Dirty=TRUE{Leerzeichen}{Leerzeichen}
..und der VergleichSet "%Dirty%"=="TRUE{Leerzeichen}{Leerzeichen}"
...natürlich immer abwinkt.Bitte ändere derartige SET-Zeilen gemäß dieser Vorlage:
01.
...
02.
SET "dirty=TRUE"
Grüße
Biber
LÖSUNG 09.05.2008 um 13:17 Uhr
Hallo Biber,
erst mal vielen Dank, dass Du dich der Sache annimmst....
Also, ich hab jetzt die Zeile geändert. Ergebnis ist, dass jetzt die bisher ignorierten zeilen mitgenommen werden. Das ist ja schon mal Spitze. Nur werden weiterhin leider die erste Zeile aus der Ursprungsdatei ignoriert und die letzte Zeile aus der Ursprungsdatei, jeder neuen Splitdatei hinten angefügt.... Hast du dafür evtl. noch eine Idee?
In Ewigkeit dankbar......
jhe
P.S.:
Hier noch mal mein aktueller Code:
erst mal vielen Dank, dass Du dich der Sache annimmst....
Also, ich hab jetzt die Zeile geändert. Ergebnis ist, dass jetzt die bisher ignorierten zeilen mitgenommen werden. Das ist ja schon mal Spitze. Nur werden weiterhin leider die erste Zeile aus der Ursprungsdatei ignoriert und die letzte Zeile aus der Ursprungsdatei, jeder neuen Splitdatei hinten angefügt.... Hast du dafür evtl. noch eine Idee?
In Ewigkeit dankbar......
jhe
P.S.:
Hier noch mal mein aktueller Code:
01.
::-----snipp Splitbla.bat Vers. 0.2----
02.
@echo off
03.
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof
04.
if not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof
05.
setlocal
06.
(set blafile=%1) & (set FirstLine=) & (set LastLine=)
07.
for /f "delims=" %%i in ('type test.txt') do if not defined firstline set firstline=%%i
08.
for /f "delims=" %%i in ('type test.txt') do set lastline=%%i
09.
(set /a cntLn=0 ) && REM Zeilenzähler
10.
(set /a MaxLnsPerFile=500) && REM Max. Zeilen je Splitdatei, eigentlich Konstante
11.
(set /a FileCnt=1 ) && REM Zähler für die Splitdateien
12.
(Set Dirty=TRUE) && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?
13.
if exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul
14.
for /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"
15.
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1
16.
echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.
17.
goto :eof
18.
---------hier Ende der Welt
19.
:WriteTmp
20.
Set /a cntln=%cntln%+1
21.
IF %cntln% GTR 1 (
22.
:: echo FILE: %~n1-%FileCnt%%~x1 LN :%cntln% Text: %~2>>%temp%\tmpbla-%FileCnt%.tmp
23.
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp
24.
SET "dirty=TRUE"
25.
If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1 )
26.
goto :eof
27.
------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife
28.
:WriteFinal
29.
echo %LastLine% >>"%temp%\tmpbla-%FileCnt%.tmp"
30.
Copy /b "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
31.
(SET Dirty=FALSE) & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)
32.
goto :eof
33.
::-----snapp Splitbla.bat Vers. 0.2----
LÖSUNG 09.05.2008 um 14:35 Uhr
Moin jhe,
für die beiden genannten Bugs/Features mit der in allen Teil-Dateien wiederkehrenden Kopf- und Fusszeilen sollten wir nochmal Deine Gegebenheiten mit deren von Oli-nux weiter oben abgleichen.
Oli-nux hatte als Vorlage eine große Datei mit Kopfzeile und Fusszeile und diese sollten in jeder der kleinen Split-Dateien auch am Anfang/am Ende geschrieben werden.
Dafür gab es (s.o.) eine Mimik mit %firstline% und %lastline% und einer Headline.txt-Datei die geschrieben wurde...
Und im WriteFinal-Block sowas:
Diese Zeilen sind jetzt z.T. nicht mehr im Batch -- deshalb bitte erst nochmal kurz Deine Ausgangssituation schildern (GROSSE Datei mit/ohne Kopf/Fusszeile; kleine Dateien mit/ohne..).
Dann wird das schon.
P.S. Und Du brauchst mir wirklich nicht ewig dankbar sein...
... depressiv wie ich bin, hab ich eh' nicht über das Jahr 2155 hinausgeplant....
Grüße
Biber
für die beiden genannten Bugs/Features mit der in allen Teil-Dateien wiederkehrenden Kopf- und Fusszeilen sollten wir nochmal Deine Gegebenheiten mit deren von Oli-nux weiter oben abgleichen.
Oli-nux hatte als Vorlage eine große Datei mit Kopfzeile und Fusszeile und diese sollten in jeder der kleinen Split-Dateien auch am Anfang/am Ende geschrieben werden.
Dafür gab es (s.o.) eine Mimik mit %firstline% und %lastline% und einer Headline.txt-Datei die geschrieben wurde...
Und im WriteFinal-Block sowas:
Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
Diese Zeilen sind jetzt z.T. nicht mehr im Batch -- deshalb bitte erst nochmal kurz Deine Ausgangssituation schildern (GROSSE Datei mit/ohne Kopf/Fusszeile; kleine Dateien mit/ohne..).
Dann wird das schon.
P.S. Und Du brauchst mir wirklich nicht ewig dankbar sein...
... depressiv wie ich bin, hab ich eh' nicht über das Jahr 2155 hinausgeplant....
Grüße
Biber
LÖSUNG 09.05.2008 um 15:40 Uhr
Deine Ausgangssituation schildern (GROSSE
Datei mit/ohne Kopf/Fusszeile; kleine Dateien
mit/ohne..).
Datei mit/ohne Kopf/Fusszeile; kleine Dateien
mit/ohne..).
Die Ausgangsdatei ist ohne Kopf- bzw. Fußzeile, die Splitdateien ebenfalls.
Es sollen lediglich die einzelnen Zeilen in Dateien zu je 500 Zeilen + 1 Datei Rest aufgeteilt werden.
P.S. Und Du brauchst mir wirklich nicht
ewig dankbar sein...
... depressiv wie ich bin, hab ich
eh' nicht über das Jahr 2155
hinausgeplant....
ewig dankbar sein...
... depressiv wie ich bin, hab ich
eh' nicht über das Jahr 2155
hinausgeplant....
HeHe...dann haben wir ja noch ein bissl Zeit, das Problem in den Griff zu bekommen...^^
Gruß
jhe
LÖSUNG 09.05.2008 um 16:41 Uhr
Moin jhe1960,
die Billig-Version der Splitterei (ohne Kopf- und ohne Fusszeile) sollte dann ungefähr so ausssehen:
[...ungetestet wegen Zeitmangel. So lange dauerts nicht mehr bis 2155.]
Grüße
Biber
die Billig-Version der Splitterei (ohne Kopf- und ohne Fusszeile) sollte dann ungefähr so ausssehen:
01.
::-----snipp Splitbla.bat Vers. 0.3----
02.
@echo off & setlocal
03.
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof
04.
IF not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof
05.
06.
SET "blafile=%1"
07.
(set /a cntLn=0 ) && REM Zeilenzähler
08.
(set /a MaxLnsPerFile=500) && REM Max. Zeilen je Splitdatei, eigentlich Konstante
09.
(set /a FileCnt=1 ) && REM Zähler für die Splitdateien
10.
Set "Dirty=TRUE" && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?
11.
IF exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul
12.
FOR /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"
13.
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1
14.
echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.
15.
goto :eof
16.
---------hier Ende der Welt
17.
:WriteTmp
18.
Set /a cntln=%cntln%+1
19.
IF %cntln% GEQ 1 (
20.
echo %~2>>%temp%\tmpbla-%FileCnt%.tmp
21.
SET "Dirty=TRUE"
22.
If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1
23.
)
24.
goto :eof
25.
------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife
26.
:WriteFinal
27.
Copy /b "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
28.
REM Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul
29.
SET "Dirty=FALSE" & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)
30.
goto :eof
31.
::-----snapp Splitbla.bat Vers. 0.3----
Grüße
Biber
LÖSUNG 09.05.2008 um 17:28 Uhr
YippppiiieeeeeeeeeeeeeeeeeeeeeeyYeahhhhhhhhhhhhhhhhhhh....^^
Es funktioniert!
Vielen Dank!!!
Und lass es dir bis 2155 nicht zu lange werden... xD
Gruß
jhe
Es funktioniert!
Vielen Dank!!!
Und lass es dir bis 2155 nicht zu lange werden... xD
Gruß
jhe
LÖSUNG 09.05.2008 um 20:05 Uhr
Na gut, jhe,
dann mach ich den Beitrag jetzt aber dicht, bevor da nochmal einer drüber stolpert..
Vrohe Vinxten
Biber
dann mach ich den Beitrag jetzt aber dicht, bevor da nochmal einer drüber stolpert..
Und lass es dir bis 2155 nicht zu lange werden
Na ja, allein um meine Überstunden abzubummeln brauche ich bis 2163, hab ich grad ausgerechnet...Vrohe Vinxten
Biber
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte