Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Logfile letzten Zeilen in Txt File mit Batch

Mitglied: keksprinz

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
Mitglied: Biber
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
Bitte warten ..
Mitglied: gemini
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.
Bitte warten ..
Mitglied: Biber
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)

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
Hope That Helps

Frank /der Biber aus Bremen

P.S. Würde ich auch als Einzeiler hinbekommen, aber das erspar ich uns
Bitte warten ..
Mitglied: keksprinz
03.08.2005 um 10:55 Uhr
Viel Dank für deine antwort,
es funktioniert super
Bitte warten ..
Mitglied: Biber
03.08.2005 um 11:01 Uhr
Freut mich und ebenfalls danke für die Rückmeldung.
Bitte warten ..
Mitglied: Oli-nux
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.
Bitte warten ..
Mitglied: Biber
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"
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.
Und das ist die splitbla.txt mit all ihren vielen Zeilen..*gg
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
Bitte warten ..
Mitglied: Oli-nux
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.
Bitte warten ..
Mitglied: Biber
18.08.2005 um 16:05 Uhr
Okay, Oli-Nux,
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:
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
Bitte warten ..
Mitglied: Oli-nux
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?
Bitte warten ..
Mitglied: Biber
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)
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---- 
Meine "Bla.txt" hab ich so verändert:
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)
Output z.B. von Bla-4.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--
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*
Bitte warten ..
Mitglied: Oli-nux
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.
Bitte warten ..
Mitglied: 57214
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+.
Bitte warten ..
Mitglied: jhe1960
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:

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---- 
Wäre echt nett, wenn Du mir da auf die Sprünge helfen könntest...

Gruß

jhe
Bitte warten ..
Mitglied: Biber
09.05.2008 um 11:40 Uhr
Moin jhe,
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
Dieser Vergleich geht in die Grütze, weil in der oberen Zeile in Wirklichkeit steht:
SET Dirty=TRUE{Leerzeichen}{Leerzeichen}
..und der Vergleich
Set "%Dirty%"=="TRUE{Leerzeichen}{Leerzeichen}"
...natürlich immer abwinkt.

Bitte ändere derartige SET-Zeilen gemäß dieser Vorlage:
01.
...
02.
SET "dirty=TRUE"
Und dann starte nochmal.

Grüße
Biber
Bitte warten ..
Mitglied: jhe1960
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:

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---- 
Bitte warten ..
Mitglied: Biber
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:
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
Bitte warten ..
Mitglied: jhe1960
09.05.2008 um 15:40 Uhr
Deine Ausgangssituation schildern (GROSSE
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....


HeHe...dann haben wir ja noch ein bissl Zeit, das Problem in den Griff zu bekommen...^^

Gruß

jhe
Bitte warten ..
Mitglied: Biber
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:
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---- 
[...ungetestet wegen Zeitmangel. So lange dauerts nicht mehr bis 2155.]

Grüße
Biber
Bitte warten ..
Mitglied: jhe1960
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
Bitte warten ..
Mitglied: Biber
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..
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch - .csv to .txt
gelöst Frage von freshman2017Batch & Shell11 Kommentare

Hallo Ihr, ich habe da nochmal eine leichte kurze Frage, vielleicht hat da jemand ein Code für mich. Folgende ...

Batch & Shell
Batch-Code in TXT auslagern
Frage von ElHuttiBatch & Shell10 Kommentare

Hallo, Ich möchte bei einem Batch-Mailprogramm, das man zum schreiben einer E-mail ändern muss, den Teil mit den Variablen ...

Batch & Shell
Batch mit for txt auslesen?
gelöst Frage von Mohji32Batch & Shell4 Kommentare

Hallo, ich habe mir den "Grundkurs" zu for schleifen im Board angeschaut aber leider nicht das hin bekommen was ...

Batch & Shell
Vorhandene TXT per Batch aktualisieren
gelöst Frage von 132749Batch & Shell6 Kommentare

Moin zusammen, ich benötige Eure Hilfe um den Inhalt einer vorhandenen TXT per Batch zu aktualisieren! So sieht meine ...

Neue Wissensbeiträge
Windows Server

Zähe Update-Installation auf Windows Server 2016

Information von kgborn vor 18 StundenWindows Server4 Kommentare

Mir sind in der Vergangenheit immer wieder Beschwerden von Admins unter die Augen gekommen, die sich über die doch ...

Humor (lol)
Turnschuhe per Firmware lahmlegen
Information von Henere vor 21 StundenHumor (lol)5 Kommentare

Und was kommt demnächst ? Bekomme ich kein Klopapier mehr, weil der Spender einem DDOS unterliegt ? :-) Ich ...

Sicherheit

Sicherheitsrisiko in WinRAR und Co. durch Schwachstelle in UNACEV2.DLL

Information von kgborn vor 1 TagSicherheit

In der seit 2005 nicht mehr aktualisierten Bibliothek UNACEV2.DLL gibt es eine Path-Traversal-Schwachstelle. Diese ermöglicht es, bei ACE-Archiven Dateien ...

Internet

CDU Propaganda: Urheberschutz im Internet - Ende des digitalen Wild-West

Information von Frank vor 1 TagInternet4 Kommentare

Hallo Administratoren, aus einem Kommentar heraus habe ich folgenden Beiträge von Herr Sven Schulze und Axel Voss (beide CDU ...

Heiß diskutierte Inhalte
Hardware
Frage an Kenner von 5,25 Zoll Laufwerken
Frage von DerWoWussteHardware53 Kommentare

Moin Kollegen. Hier wird gerade im Archiv gewühlt und 5,25 Zoll Disketten ("2S/HD", 96TPI) sollen eingelesen werden. Ich habe ...

Windows Tools
Dateiname Automatisch auf PDF Klartext oder als Barcode abdrucken
Frage von spongebob24Windows Tools26 Kommentare

Hallo Zusammen, habe eine tolle Anforderung bekommen. Ich sollte auf mehrere PDF Dateien Automatisch einen Stempel anbringen lassen. Toll ...

Datenbanken
PHP Fatal error: Uncaught Error: Call to undefined function oci connect
gelöst Frage von PlanitecXDatenbanken22 Kommentare

Hallo Zusammen, ich sitze seit Tagen am Problem das ich keine PHP Anwendung mit Anbindung zu Oracle zum laufen ...

Internet
SDSL oder ADSL - Preis-Leistungs-Verhältnis
Frage von ZeppelinInternet20 Kommentare

Wehrte Community, der Unterschied dieser beiden Techniken ist recht einfach erklärt. Das S, steht für Synchron (Gleich) und das ...