Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

mehrere Zeilen auslesen und zu einer zusammenfassen

Frage Entwicklung Batch & Shell

Mitglied: wickie666

wickie666 (Level 1) - Jetzt verbinden

07.02.2007, aktualisiert 18:55 Uhr, 4606 Aufrufe, 9 Kommentare

Ich möchte aus einer Textdatei die Zeileneinträge auslesen und diese in einer Variablen zwischenspeichern und dann mittels for-schleife in eine Textdatei schieben.

set line=
FOR /f "delims=" %%f IN (MODULES.txt) DO set line=%line% %%f
echo %line% >>sortiert.txt


Im Grunde nichts schweres, nur leider macht die for-schleife Probleme. Ich verstehe nicht, warum ich immer nur den letzten Eintrag der TXT Datei aufgelistet bekomme.
Also in wenn in der MODULES.txt die Eintrage
1
2
3
stehen, wird nur 3 in der sortiert.txt aufgeführt.
Ich will aber
1 2 3
dort stehen haben!
Wo liegt mein fehler?
Mitglied: bastla
07.02.2007 um 15:13 Uhr
Hallo wickie666!

So vielleicht:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
set line= 
03.
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO set "line=!line! %%f" 
04.
echo %line%>>sortiert.txt
Mit dem "type" habe ich etwas Zusatzaufwand betrieben, um zB Pfadangaben mit Leerstellen unterbringen zu können - kannst Du auch wieder auf die Angabe des Dateinamens (aber ohne Anführungszeichen) reduzieren.

Grüße
bastla
Bitte warten ..
Mitglied: wickie666
07.02.2007 um 15:33 Uhr
super, das funktioniert.
Nun aber noch eine kleine frage, da ich nicht genau weiss, wie ich es angehen soll:
Wie kann ich nun jeweils nach 3 einträgen einen Zeilenumbruch erstellen?
in batch dateien kann man for schleifen doch nicht verschachteln, oder?
Bitte warten ..
Mitglied: bastla
07.02.2007 um 15:55 Uhr
Hallo wickie666!

Verschachteln ginge schon, Du könntest es aber auch so versuchen:
01.
@echo off 
02.
set line= 
03.
set /a count=0 
04.
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f" 
05.
(echo %line%)>>sortiert.txt 
06.
goto :eof 
07.
:ProcessLine 
08.
if %count%==0 goto :NewLine 
09.
set /a count+=1 
10.
If %count% GTR 3 goto :NewLine 
11.
set "line=%line% %~1" 
12.
goto :eof 
13.
:NewLine 
14.
If %count% neq 0 (echo %line%)>>sortiert.txt 
15.
set "line=%~1" 
16.
set /a count=1 
17.
goto :eof
Die Klimmzüge mit dem Überprüfen von %count% auf 0 verhindern, dass vor der ersten Zeile eine Leerstelle ausgegeben wird und die Klammern verhindern das am Ende der Zeile.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
07.02.2007 um 16:55 Uhr
Moin wickie666,

hmmm... ein bisschen angestrengt sehen diese Klimmzüge schon aus.

Eine Variation von bastla's Vorlage wäre:
01.
::----------snipp 3Lines2One.bat 
02.
@echo off &setlocal 
03.
set line= 
04.
set /a count=0 
05.
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f" 
06.
if [%line%] NEQ [] (echo %line%)>>sortiert.txt 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
set "line=%line% %~1" 
11.
set /a count+=1 
12.
set /a modrest=count%%3 
13.
If %modrest%==0 ( 
14.
    (echo %line%)>>sortiert.txt 
15.
    set Line= 
16.
)    
17.
goto :eof 
18.
::----------snipp 3Lines2One.bat
Ich hab dieses "Plus 1 und wenn = 3 dann wieder 0" jetzt mit der Modulo-Funktion versucht, etwas lesbarer zu machen.
Und, zweite Anmerkung, ich würde diese Umleitung nach sortiert.txt NICHT im Batch nach den ECHO-Befehlen machen, sondern im Batch nur ein "Echo %line%" behalten.
Und dann den Batch 3Lines2One.bat ggf. komplett umleiten.
3Lines2One >sortiert.txt

Gruss
Biber
Bitte warten ..
Mitglied: bastla
07.02.2007 um 17:33 Uhr
@Biber

Kommt mir das nur so vor, oder beginnen bei Deiner Lösung alle Ergebniszeilen mit einer Leerstelle (das zu vermeiden war eigentlich der Grund der kaum gewürdigten Anstrengung ?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
07.02.2007 um 18:06 Uhr
@bastla

Menno, man/frau kann sich auch anstellen... ist doch nur ein Batch..
01.
::----------snipp 3Lines2One.bat 
02.
@echo off &setlocal 
03.
set "line= " 
04.
set /a count=0 
05.
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f" 
06.
if "%line%" NEQ " " (echo %line%x) 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
set "line=%line%%~1" 
11.
set /a count+=1 
12.
set /a modrest=count%%3 
13.
If %modrest%==0 ( 
14.
    (echo %line%) 
15.
    set "Line= " 
16.
)    
17.
goto :eof 
18.
::----------snipp 3Lines2One.bat
[wirkt immer noch nicht angestrengt,,,,]

Grüße
Biber
Bitte warten ..
Mitglied: bastla
07.02.2007 um 18:42 Uhr
@Biber

Montag? Dann sag' ich jetzt nix mehr ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
07.02.2007 um 18:49 Uhr
...seit ich diesen ###-Job hier in diesem ver###ten ###snest habe, ist jeder Tag ein gefühlter Montag...

Das kannst Du auch nicht schlimmer werden lassen...
Bitte warten ..
Mitglied: bastla
07.02.2007 um 18:55 Uhr
@Biber
Das kannst Du auch nicht schlimmer werden lassen...
Soll keiner sagen, ich hätt's nicht versucht.

Sorry - bin momentan etwas hyperaktiv (Fieber hat nachgelassen, Lungenentzündung als "nur leicht" diagnostiziert) ...

Zonenrandgebiet
Noch länger?

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst MS Access: Mehrere Zeilen in einer Zelle zusammenfassen (3)

Frage von User1000 zum Thema Datenbanken ...

Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

VB for Applications
gelöst Tabellenblätter zusammenfassen und Kennzeichnen (7)

Frage von Semmy1 zum Thema VB for Applications ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

E-Business
Wo tragt ihr eure privaten Termine ein? (13)

Frage von honeybee zum Thema E-Business ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...

Entwicklung
gelöst Tipp für Anfänger- Wie würdet ihr automatischen Mailversand umsetzen? (12)

Frage von Cloudyme zum Thema Entwicklung ...