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

Zeilenweise auslesen und Abspeichern in einer Variable

Frage Entwicklung Batch & Shell

Mitglied: Jacky86

Jacky86 (Level 1) - Jetzt verbinden

20.02.2009, aktualisiert 16:23 Uhr, 5431 Aufrufe, 3 Kommentare

Hallo zusammen

Ich habe folgendes Problem: Ich möchte etwas aus einer Text-Datei Zeilenweise auslesen und die Zeile noch in der FOR-Schleife dann in eine andere Variable speichern, die später dann noch bearbeitet wird.

Meine Text-Datei sieht folgendermassen aus (ist vorerst nur ein Test):

c:\test\test\test\test.html
c:\test2\test2\test2\test2.html

Hier meine Bat-Datei:

@echo off
FOR /F %%i IN (C:\test.txt) do (
echo %%i
set test=%%i
echo %test%
)

Und hier die Ausgabe:

c:\test\test\test\test.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html

Ich will aber, dass in der 2. Zeile "c:\test\test\test\test.html" steht, also das selbe wie in der oberen Zeile.
Irgendwie setzt er in der Variable "test" den Wert der 1. Zeile nicht ein, sondern nur den Wert der 2.

Kann mir das jemand weiterhelfen?

Danke & Gruss
Jacky86
Mitglied: ratzla
20.02.2009 um 18:19 Uhr
Innerhalb einer for schleife kann Windows keine Variablen veränden die in der Schleife selbst verwendet werden.
habe mich das selbst schon ziemlich geplagt.
Evtl. klappts wenn Du die Variable an einen andere Variable übergibst und diese dann bearbeites.
Viel Glück

(Mir hats irgenwann dann glangt.. ich habs dann unt Linux gemacht - da ist sowas ohne gefrickle möglich)
Bitte warten ..
Mitglied: bastla
20.02.2009 um 19:17 Uhr
Hallo Jacky86 und willkommen im Forum, hallo ratzla!

Eine kleine Richtigstellung zu
innerhalb einer for schleife kann ### keine Variablen veränden die in der Schleife selbst verwendet werden.
Defaultmäßig (weil "delayedExpansion" nicht aktiviert ist) können Werte von Variablen in einer "for"-Schleife zwar verändert werden, allerdings wird bereits zu Beginn der Schleifenverarbeitung der Variableninhalt gelesen und dann nicht mehr aktualisiert - daher wird bei der Ausgabe ein "alter" (bzw für die erste Zeile, da die Variable zu Beginn der Schleife noch keinen Inhalt hatte, gar kein) Wert verwendet.

Abhilfe kann hier ein
setlocal enabledelayedexpansion
schaffen - das sähe so aus:
01.
@echo off & setlocal enabledelayedexpansion 
02.
FOR /F %%i IN (C:\test.txt) do ( 
03.
    echo %%i 
04.
    set test=%%i 
05.
    echo !test! 
06.
)
Zu beachten ist nicht nur die veränderte Schreibweise mit "!" anstelle von "%", sondern auch, dass innerhalb der Variablen daraus resultierend "!" einfach "verschluckt" werden.

Nicht zuletzt deswegen eine alternative Vorgangsweise mit Verwendung eines Unterprogrammes:
01.
@echo off & setlocal 
02.
FOR /F %%i IN (C:\test.txt) do ( 
03.
    echo %%i 
04.
    set "test=%%i" & call :ProcessLine 
05.
06.
goto :eof 
07.
 
08.
:ProcessLine 
09.
echo %test% 
10.
goto:eof
Im Unterprogramm ":ProcessLine" (das als eigener "Batch im Batch" zu sehen ist) können bei Bedarf auch zusätzliche Modifikationen des Textes oder Berechnungen etc vorgenommen werden.

Grüße
bastla
Bitte warten ..
Mitglied: Jacky86
21.02.2009 um 14:32 Uhr
Hallo zusammen

Funktioniert super mit dem Unterprogramm.

Vielen Dank für eure Hilfe!

Gruss
Jacky86
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (1)

Frage von Zendara zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (3)

Frage von tralveller zum Thema Batch & Shell ...

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

Frage von 126594 zum Thema PHP ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Komplett neues Netzwerk, Ubiquiti WLAN, Router, Switch (16)

Frage von Freak-On-Silicon zum Thema LAN, WAN, Wireless ...

CMS
Lokales Wordpress im LAN - wie aufsetzen? (15)

Frage von Static zum Thema CMS ...

LAN, WAN, Wireless
IP im privaten Netz nicht erreichbar (12)

Frage von guntis zum Thema LAN, WAN, Wireless ...

Windows Server
Druck wird nicht erlaubt (10)

Frage von daquick zum Thema Windows Server ...