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

Mit Batch mehrzeilige Spalte zeilenweise auslesen und Inhalt weiterverwenden...?

Frage Entwicklung Batch & Shell

Mitglied: 76623

76623 (Level 1)

18.03.2009, aktualisiert 13:22 Uhr, 5628 Aufrufe, 8 Kommentare

Hey Leute,
Auch wenn es schon -zig Beiträge ähnlicher Art gibt, iwie bin ich einfach zu unfähig die tw schon vorhandenen Lösungen an mein Batchfile anzupassen, liegt auch daran dass ich die FOR-Anweisung noch nicht zu 100% versteh, egal...

Der Titel sagt ja schon das Wesentliche, nun zu den Details:
Ich habe eine Textdatei(Bsp.txt) mit mehreren Zeilen die wie folgt formatiert ist
(reines Bsp, in Wirklichkeit handelt es sich um 100.000 Zeilen mit total unterschiedlichen Zahlen):
 
	9
Mit Worten ausgedrückt: eine einzelne Spalte mit bekannter Zeilenanzahl

Bestimmte Zahlen/Zeilen möchte ich nun nacheinander auslesen um mit ihnen weiter zu arbeiten(im Prog unten ist diese "Verarbeitung" jetzt nur ein "echo" - rein der Einfachheit halber und um die Funktion zu testen. Tatsächlich folgen div. größer/kleiner Abfragen und dann entsprechende weitere Abläufe)

Mein BatchProg schaut derzeit wie folgt aus (an Bsp.txt angepasst):
01.
@echo off 
02.
set /a counter=0 
03.
 :loop 
04.
set /a counter=%counter%+1 
05.
for /f "tokens=%counter%" %%i in (Bsp.txt) do set /a zahl=%%i 
06.
echo %zahl% 
07.
if %counter%==9 goto :ende 
08.
goto :loop 
09.
 :ende 
10.
 pause 
11.
exit
Ergebniss dieses Ablaufes ist, dass ich 9x die Zahl 9 ausgespuckt bekomme, weil es einfach jedesmal die ganze spalte runterrattert.

Falls Unklarheiten, hier noch ne Bemerkung zum besseren Verständnis meines Anliegens:

WÜRDE meine Bsp.txt so formatiert sein (alle Werte in nur einer Zeile), ...

1 2 3 4 5 6 7 8 9

... so würde mein Batchprog wie gewünscht funktionieren(Ergebnis schaut hier so aus: nacheinander werden die Zahlen 1-9 ausgespuckt, danach pause und exit), und ich könnte mit Hilfe des %Counter%s auf das gewünschte Zeichen (z.B. 3. Zahl) zugreifen und damit bei Bedarf weiterarbeiten. (z.B. IF %counter%==3 SET irgendwas_1=%zahl%... IF irgendwas_1... etc)
Aber leider ist diese Formatierung bei meiner .txt nicht der Fall.

Das diese "tokens"-Zeichenabfrage jetzt irgendwie an den Zeilenumbrüchen scheitert ist mir schon klar, nur die Frage ist: Wie mach ich das auch meinem Batchfile klar?

Danke im Vorraus für euren PRODUKTIVEN Antworten
(especially dedicated for wannabe-DrHouse)

Mit freundlichen Grüßen, 5chweinsbraten




[Edit Biber] Code mit Code-Tags formatiert. [/Edit]^^
Mitglied: 60730
18.03.2009 um 12:21 Uhr
Hallo Servus und auch dir ein herzhaftes Willkommen.

Mir fallen drei Dinge auf:

  • die Variable "mit der Tür ins Haus" hast du erfüllt - das ist schonmal eher ungern gelesen.
  • Dein Beitrag und deine Batch sind irgendwie "wirr" - was genau ist denn das Begehr?
  • Bitte dringendst um Hilfe !!

for /?

Gruß
[_] Benachrichtigung bei Antwort keine Arme -keine Kekse
Bitte warten ..
Mitglied: 76623
18.03.2009 um 12:58 Uhr
Hast tw recht, habs daher tw editiert damit auch jene Leute was davon haben, welche sich nicht ohne ultimativer Höflichkeitsform zurechtfinden

Mit dringendst mein ich, dass ich es blöderweise eilig habe, mit Hilfe mein ich: ich schaffs leider nicht allein

"Begehr" steht im Titel und im Rest des Beitrages, sogar sehr detailiert um Unklarheiten auszuschließen, daher mit Mörderlänge

wirre Batch ... bin eben kein Programmierer, aber so wirr kanns net sein, denn vom Prinzip funktionierts ja doch, eben nur bei Textdatein mit mehreren Zeichen die in ner einzelnen ZEILE stehen, nur gehts eben NICHT, wenn diese in ner SPALTE(immer Zeilenumbruch zw den Zeichen)stehen

Bitte um genauere Fragen zum Code, denn mit "irgendwie wirr" kann man die werdende Lösung zum Beitrag nicht wirklich vorantreiben

-Danke im Vorraus

Mit freundlichen Grüßen, 5chweinsbraten
Bitte warten ..
Mitglied: 60730
18.03.2009 um 16:52 Uhr
Servus,

ultimativer Höflichkeitsform

denk daran, wir sind alle auch nur Menschen und umsonst ist nicht mal der Tot, der kostet das leben.
Von daher ist es nicht wirklich ultimativ, sondern ein / das einzige was ich und einige andere bestimmt auch von demjenigen verlangen, dem wir für "umme" helfen.

Und damit du einen Einblick bekommst, wie eine Schleife funktioniert, habe ich dein Script so angepasst, das es "logischer" wird.

01.
@echo off 
02.
set /a counter=0 
03.
 :loop 
04.
set /a counter=%counter%+1 
05.
for /f %%i in (Bsp.txt) do ( 
06.
echo jetzt bin ich zum %counter% mal in der Datei und lese den Inhalt %%i && set /a zahl=%%i) 
07.
 
08.
if %counter%==9 goto :ende 
09.
goto :loop 
10.
 :ende 
11.
 pause 
12.
exit
gruß
(especially dedicated for wannabe-DrHouse)
ps:(i dont wanna be ur drill instructor - but i try my very best)
Bitte warten ..
Mitglied: bastla
19.03.2009 um 01:37 Uhr
Hallo 5chweinsbraten!

Wenn auch "wirr" nicht zutreffen mag, so fehlt mir doch in Deiner Beschreibung etwas an Zusatzinformation - insbes wieviele Zeilen Du auslesen willst und woher die Zeilennummern dafür stammen ...

Im einfachsten Fall (gesuchte Zeilen "hartcodiert") ginge es etwa so:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=D:\Deine Textdatei.txt" 
03.
 
04.
set /a Z=1 
05.
for /f "usebackq delims=" %%a in ("%Datei%") do ( 
06.
    if !Z!==1 call :Verarbeitung 1 "%%a" 
07.
    if !Z!==3 call :Verarbeitung 3 "%%a" 
08.
    if !Z!==4 call :Verarbeitung 4 "%%a" 
09.
    if !Z!==7 call :Verarbeitung 7 "%%a" 
10.
    set /a Z+=1 
11.
12.
goto :eof 
13.
 
14.
:Verarbeitung 
15.
echo Zeile %1:%~2 
16.
goto :eof
Wenn es nur um wenige Zeilen geht, etwa so:
01.
@echo off & setlocal 
02.
set "Zeilen=4 7 3 1" 
03.
set "Datei=D:\Deine Textdatei.txt" 
04.
 
05.
for %%i in (%Zeilen%) do call :ProcessLine %%i 
06.
goto :eof 
07.
 
08.
:ProcessLine 
09.
set /a Z=%1-1 
10.
if %Z%==0 set /p Zeile=<"%Datei%"& goto :Verarbeitung 
11.
set Zeile= 
12.
for /f "usebackq skip=%Z% delims=" %%a in ("%Datei%") do if not defined Zeile set "Zeile=%%a" 
13.
 
14.
:Verarbeitung 
15.
echo Zeile %1: %Zeile% 
16.
goto :eof
oder so:
01.
@echo off & setlocal 
02.
set "Zeilen=4: 7: 3: 1:" 
03.
set "Datei=D:\Deine Textdatei.txt" 
04.
 
05.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"^|findstr /b "%Zeilen%"') do echo Zeile %%i: %%j
Grüße
bastla
Bitte warten ..
Mitglied: 60730
20.03.2009 um 10:22 Uhr
Servus 5chweinsbraten,

auch wenn es "blöd" ist:

zuerst einmal das Lob.

  • schön - dass du deinen Beitrag etwas geändert hast.

Aber....

  • schade, das dein Beitrag - ast genau dem entspricht, den ich "erwartet" habe:
5chweinsbraten am 18.03.2009 um 11:45:28 Uhr.
/Snip
\snap
Bitte dringendst um Hilfe !!


Das du meine Hilfe nicht akzepzierst - weil Sie eine Hilfestellung eine andere als die gesuchte ist - eh klar.

Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet - oder auch nicht - ist dann irgendwie traurig.

Have a nice weekend und nimm das mal alles in ruhiger Umgebung so an, wie es gemeint ist.

Gruß
Bitte warten ..
Mitglied: bastla
20.03.2009 um 16:25 Uhr
@TimoBeil
Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet - oder auch nicht
"Warten" wäre übertrieben - ist bei 5chweinsbraten wohl eine der Situationen, die zeigen, wie schnell sich Prioritäten verschieben können (oder es war nach doch beinahe 14 Stunden bereits viel zu spät).

Grüße
bastla
Bitte warten ..
Mitglied: Biber
20.03.2009 um 16:37 Uhr
<OT II>
Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet ...

Erfahrungsgemäß wartet Kollege bastla jetzt in der Fastenzeit nur auf eines.... das Ende derselben.
Bzw. wir alle warten jetzt auf Schweinsbraten... *gg

Und niemand sollte sollte jetzt das Wort "Feed" wie in "Feedback" erwähnen....

... oder Festplatten...

unangenehme Assoziationen..


</OT II>

Schönes Wochenende und nehmts leicht
Biber
Bitte warten ..
Mitglied: bastla
20.03.2009 um 16:42 Uhr
@Biber
No problem - wozu habe ich das Sternzeichen Phlegmadicker ...

Auch Dir ein schönes Wochenende
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...