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, 4602 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 ...

Datenbanken
gelöst MSSQL Datenkonvertierung 1 Zeile auf mehrere Zeilen - bitte um Tips (4)

Frage von highmoe zum Thema Datenbanken ...

PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Windows Update
gelöst MS: Update-Server-Adressen OHNE Wildcards (17)

Frage von mrserious73 zum Thema Windows Update ...

Viren und Trojaner
Ransomware .nm4 (14)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

Microsoft Office
+1.000 Ordner in Outlook: Wie besser? (11)

Frage von Matsushita zum Thema Microsoft Office ...