Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

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, 5442 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 Datei zeilenweise auslesen - es passiert aber nichts (3)

Frage von Nagus zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
gelöst In einer Batch-Datei einen variablen Teil eines Dateinamens auslesen (5)

Frage von dh0815 zum Thema Batch & Shell ...

Neue Wissensbeiträge
LAN, WAN, Wireless

Schwachstelle im WPA2 Protokoll veröffentlicht

(3)

Information von colinardo zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte