peter32
Goto Top

For Schleife kaputt?

Hallo,
ich finde den Fehler nicht...
irgendwie bekomme ich ständig denselben Inhalt in "Name.txt" und kann dann nicht weiterarbeiten.... Weiß einer warum? In der "started.txt" steht übrigens:

Zeile1
Zeile2
Zeile3
Zeile4

Und hier mein Code.

@echo off & Setlocal
:Begin

if exist "Started.txt" del "Started.txt" /s /q >NUL  
dir /od /b "Started">"Started.txt"  
for /f "usebackq delims=" %%a in ("Started.txt") DO (   
	call :ForEveryStarted "%%a"   
) 
goto :end

:ForEveryStarted

echo %date% %time% Programm ist gerade bei "ForEveryStarted".  
if exist "name.txt" del "name.txt" /s /q >NUL  
echo %~1>"name.txt"  
echo Die Zeile heisst: %~1
set "StartedProject="  
set /p "StartedProjekt="<"name.txt"  
:end
pause

Ich wäre natürlich auch einverstanden, die Zeile direkt in eine Variable zu packen, muss aber nicht sein.

Danke im Voraus!

LG
Peter

Content-Key: 314476

Url: https://administrator.de/contentid/314476

Printed on: April 16, 2024 at 15:04 o'clock

Member: Pjordorf
Solution Pjordorf Sep 05, 2016 at 16:55:52 (UTC)
Goto Top
Hallo,

Zitat von @Peter32:
@echo off & Setlocal
Ein
setlocal EnableDelayedExpansion
am Anfang sollte dir weiterhelfen und dann anstelle der % nimmst du die !.
Die Geheimnisse des Batch Zeilen Interpreters
http://ss64.com/nt/delayedexpansion.html
https://blogs.msdn.microsoft.com/oldnewthing/20060823-00/?p=29993

Gruß,
Peter
Member: Peter32
Peter32 Sep 06, 2016 at 12:40:38 (UTC)
Goto Top
Danke soweit!

Allerdings ist das als Anfänger ganz schön schwer zu begreifen... Also wenn ich alle % mit ! ersetze, funktioniert es auch nicht.
Ich habe die 3 Links mal gelesen aber nicht wirklich vollständig nachvollziehen können leider.

Welche % muss ich in meinem Code mit einem ! ersetzen, sodass es funktioniert?
Member: Biber
Biber Sep 06, 2016 at 14:34:35 (UTC)
Goto Top
Moin Peter32,

ich kann in deinem oben geposteten Code weder erkennen, wozu du die Variable %StartedProject% überhaupt setzen willst und - da sie immer nur gesetzt, aber nie benutzt wird- kann ich auch nicht erkennen, warum du meinst, in Name.txt (bzw. in %StartedProject%) stünde immer der gleiche Inhalt.

Jedenfalls lässt sich dein Code zusammendampfen auf
@echo off & Setlocal enabledelayedexpansion
:Begin

for /f "delims=" %%a in ('dir /od /b "Started"') DO (   
    echo Die Zeile heisst: %%a
    REM Alternativ zur Vorzeile ist nä. Zeile mit Variable 
    REM set "StartedProject=%%a" & echo StartedProject heisst !StartedProject! 	  
) 
pause

Du brauchst zur Ausgabe der Laufvariablen gar kein Zwischenparken in einer Variablen %StartedProject%.
Wenn du das dennoch meinst machen zu müssen, dann wäre eine Ausgabe wie in der zweiten auskommentierten Zeile (zweite REM-Zeile) vorgekaspert machbar.

Das sollte deine Rückfrage "Welche % muss ich in meinem Code mit einem ! ersetzen, sodass es funktioniert?" beantworten.

Grüße
Biber
Member: Peter32
Peter32 Sep 06, 2016 updated at 15:27:40 (UTC)
Goto Top
Hallo Biber,

danke für deinen Beitrag!

Ich benötige in einem späteren Zeitpunkt unbedingt die Variable %StartedProject%.

Wenn ich aber mit
	call :ForEveryStarted "%%a"   
arbeite (was ich hier brauche), dann gibt mir das Programm immer als Variable "%a" aus statt dem korrekten namen...?

EDIT: Oh, OK bin selbst darauf gekommen. Ich kann den Code einfach so schreiben:

@echo off & setlocal enabledelayedexpansion
:Begin

for /f "delims=" %%a in ('dir /od /b "Started"') DO (   
	set "StartedProject=%%a" & echo StartedProject heisst !StartedProject! 	  
    call :ForEveryStarted 
) 
echo ende der schleife
pause
goto :end

:ForEveryStarted
echo %date% %time% Programm ist gerade bei "ForEveryStarted".  
echo StartedProject heisst !StartedProject! 	
pause
goto :eof

:end
echo ENDE
pause
Member: Pjordorf
Pjordorf Sep 06, 2016 at 15:59:18 (UTC)
Goto Top
Hallo,

Zitat von @Peter32:
Allerdings ist das als Anfänger ganz schön schwer zu begreifen...
Und das obwohl Batch schon vernünftig Benutzerbar seit Version 3.3 jetzt ca. 20 Jahre existiert. Willst du allerdings die neuere Version lernen dann nimm Powershell, wer weiß wie lange noch DOS und Batch noch existiert bzw. Laufen tut.

Also wenn ich alle % mit ! ersetze, funktioniert es auch nicht.
Von alle war auch nicht die redeface-smile Du musst dir nur klar werden was ist der Zeitpunkt wo der Kommandoprozessor deine Batch liest und wann ist der Zeitpunkt wo du Variblen bzw. deren Inhalt verändern willst.

Ich habe die 3 Links mal gelesen aber nicht wirklich vollständig nachvollziehen können leider.
Obwohl dies hier schon eine gute Darstellung und erklärung bietet, nochmals lesen und die Begriffe welche dir fremd sind nachlesen / andere Quellen nutzen. Das Internet ist heutzuitage voll von brauchbaren Informationen. Es gibt hier viele Benutzer welche noch Batch lernen mussten aber es weder Öffentliches Internet noch Suchmaschinen gab. Auch Büchereien hatten noch keine Bücher über diese Themen. face-smile Es hat ja keiner gesagt das Batch einfach ist, auch wenn es schon ein paar Tage existiert face-smile

Welche % muss ich in meinem Code mit einem ! ersetzen, sodass es funktioniert?
Wurde dir am Beispiel vom @Biber gut demonstriert face-smile

Gruß,
Peter