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, 5410 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst HTML Dropdownmenü auslesen und in PHP als Variable übergeben (35)

Frage von ITFlori zum Thema PHP ...

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

Frage von n0cturne zum Thema Batch & Shell ...

Batch & Shell
gelöst DWORD (Name immer verschieden) eines RegKeys auslesen und in Variable schreiben (2)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere Ordnernamen auslesen und in eine Variable schreiben (5)

Frage von schmitho zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...