Batch: For Schleifen ???

  • #1
F

FreeKevin

Mitglied
Themenersteller
Dabei seit
08.02.2006
Beiträge
22
Reaktionspunkte
0
Hallo Batch Programmierer,

Ich bin sehr an der Batch Programmierung interessiert, (habe auch schon fast alle Befehle drauf und schon ein paar sehr nützliche tools hergestellt) aber ich habe bis heute immer noch nicht verstanden wie und wofür man diese For Schleifen benutzt.

Vielleicht könnte mir das ein eingefleischter Programmierer nochmal näher erklären (Ich habe schon sämtliche Tutorials dazu durchgelesen aber nie verstanden :| ).

Diesen Script kann man zur Erklärung verwenden:

@echo off
:start

for /F tokens=1,2,3,4,5,6,7 delims=.:, %%1 IN (%date%.%time%) do (
if /i exist z:\tempdat (
if not %%1.%%2.%%3.%%4:%%5:%%6,%%7 == %date%.%time% echo fs-e
%%1.%%2.%%3.%%4:%%5:%%6,%%7 %date%.%time% >> log.txt
)
if /i exist y:\tempdat (
if not %%1.%%2.%%3.%%4:%%5:%%6,%%7 == %date%.%time% echo fs-f
%%1.%%2.%%3.%%4:%%5:%%6,%%7 %date%.%time% >> log.txt
)

if /i exist \\dc1\c$\pcsoft (
if not %%1.%%2.%%3.%%4:%%5:%%6,%%7 == %date%.%time% echo dc1
%%1.%%2.%%3.%%4:%%5:%%6,%%7 %date%.%time% >> log.txt
)
if /i exist \\dc2\c$\pcsoft (
if not %%1.%%2.%%3.%%4:%%5:%%6,%%7 == %date%.%time% echo dc2
%%1.%%2.%%3.%%4:%%5:%%6,%%7 %date%.%time% >> log.txt
)
)

ping fs-e -n 1 -i 1
if %errorlevel% == 1 echo Ping fs-e %date%.%time% >> log.txt
ping fs-f -n 1 -i 1
if %errorlevel% == 1 echo Ping fs-f %date%.%time% >> log.txt
ping dc1 -n 1 -i 1
if %errorlevel% == 1 echo Ping d1 %date%.%time% >> log.txt
ping dc2 -n 1 -i 1
if %errorlevel% == 1 echo Ping dc2 %date%.%time% >> log.txt


sleep 1
goto start
 
  • #2
na ich kanns ja mal probieren,

die For Schleifen sind in der Batch Programmierung das mächtigste Mittel überhaupt, da man damit das meiste realisieren kann.

Zu deinem Beispiel :

Code:
@echo off
:start

for /F tokens=1-7 delims=.:,  %%a IN (%date%.%time%) do (
REM /i weglassen!
if exist z:\tempdat (
if not %%a.%%b.%%c.%%d:%%e:%%f,%%g == %date%.%time% (
echo fs-e %%a.%%b.%%c.%%d:%%e:%%f,%%g %date%.%time% >> log.txt
)
)
.....

Was ich aber an deinem Beispiel nicht versteh ist, warum der Vergleich der Zeit innerhalb der For-SChleife?
> %%a.%%b.%%c.%%d:%%e:%%f,%%g == %date%.%time% ist immer wahr, weil zum Beginn der Schleife alle
normalen Variablen (also nicht %%a etc.) innerhalb der For-Schleife (bspw. %date%.%time%) und in den Klammern
(%date%.%time%) erweitert werden (d.h. nicht während der Laufzeit), und somit bei jedem Durchlauf den gleichen Wert haben.



ich selber benutze hauptsächlich fast nur die For-Schleife mit den Parameter /F (reicht eigentlich aus),
bspw. kann man auch einen Befehl ausführen und auswerten:

For /F %%a in (' dir /A/B *->) do (echo %%~nxa)



für weitere Hilfe einfach mal in der cmd.exe->if /?' oder->for /?' eingeben

mfg
 
  • #3
Hallo Batch Programmierer,

Um nochmal alle Unklarheiten zu korrigieren muss ich sagen, dass ich diesen Script im Netz gefunden habe. Ich weiss also auch nicht ob Dieser falsch oder richtig ist.




Aber nochmal zu der Erklärung des For Befehls:
ich habe einfach mal den Folgenden Text aus der CMD übernommen


FOR /L %Variable IN (Start,Schritt,Ende) DO Befehl [Parameter]

Der Satz ist eine Folge von Zahlen von Start bis Ende und der
angegebenen Schrittweite. So erzeugt (1,1,5) die Folge 1 2 3 4 5 un
(5,-1,1) erzeugt die Folge (5 4 3 2 1).

FOR /F [Optionen] %Variable IN (Dateiensatz) DO Befehl [Parameter]
FOR /F [Optionen] %Variable IN (Zeichenkette) DO Befehl [Parameter]
FOR /F [Optionen] %Variable IN (Befehl) DO Befehl [Parameter]


Die größte Frage ist erstmal: Was macht der for Befehl?

- wofür steht das /f

es wäre nett, wenn jemand die anderen Teile mal erklären könnte. :1
 
  • #4
Die Erklärung kommt bei mir gleich (nach einem Tastendruck): :coolsmiley:
Der Dateiensatz besteht aus einem oder mehreren Dateinamen. Jede Datei
wird geöffnet, gelesen und bearbeitet, dann wird mit der nächsten Datei
des Satzes fortgefahren. Die Bearbeitung einer Datei erfolgt zeilenweise,
jede einzelne Textzeile wird ausgewertet und in die entsprechenden Token
(keinen oder mehrere) zerlegt. Die Befehle in der FOR-Schleife werden dann
mit den Variablenwerten (d.h. den gefunden Zeichenketten bzw. Token)
aufgerufen. Standardmäßig liefert /F den ersten, durch ein Leerzeichen
getrennten Token von jeder Zeile in jeder Datei. Leerzeilen werden
übersprungen. Das standardmäßige Verhalten bei der Analyse kann wahlweise
durch den Parameter Optionen überschrieben werden. Das ist eine
Zeichenkette in Anführungszeichen, welche eines oder mehrere Schlüssel-
wörter enthält, um verschiedene Parameter für die Analyse anzugeben. Diese
Schlüsselwörter sind: (...)


'for' ist eine Schleife, die einen bzw. mehrere Befehlt enthält, die mehrmals wiederholt werden. Wie oft diese Anweisungen wiederholt werden und noch einiges mehr werden im Kopf (zB: FOR /F [Optionen] %Variable IN (Dateiensatz) DO) festgelegt.

Grüße,
don_basto.
 
  • #5
Hallo leute,

wollte mal fragen warum das ned geht:

for %i in <woche1 woche2 woche3> do mkdir %i

herauskommen SOLLTE
Ordner woche1 und Ordner woche2

es kommt aber
i% ist syntaktisch an dieser Stelle nicht verarbeitbar.

:'(


Need help
 
  • #6
:1 Hallo

Also ich hab MS Win XP [Version 5.1.2600]


:) Mein Lösungsvorschlag:
----------------------------------------------------------------------------------
@echo off
cd %userprofile%\desktop
md Test
if not exist Test goto :pause_I
cd Test
::
:: Hier zu Deiner Frage, hoff des war was Du gemeint hast
::
:Anzahl_der_Ordner
set max=10
for /l %%z in (1,1,%max%) do md woche%%z
REM: Oder einfach in einer Zeile: for /l %z in (1,1,10) do md woche%z
::
:: Zur Sicherheit
::
:Ordner_erstellt
if not exist woche%max% goto :pause_II
if exist woche%max% exit
:pause_I
ping 127.0.0.0 > nul
goto :Anzahl_der_Ordner
:pause_II
ping 127.0.0.0 > nul
goto :Ordner_erstellt
----------------------------------------------------------------------------------

Je nach dem welchen Wert die Variable max hat, so viele Ordner werden im Testverzeichnis erstellt.

Wenn du nur den FOR Befehl brauchst, dann würd ich des hier irgendwie einbauen:

for /l %z in (1,1,10) do md woche%z

=> Hier würden z.B. 10 Ordner (woche1 - woche10) erstellt (Pfad musst halt noch angeben mml).
 
  • #8
@NichWeiss


Nochmal zu den Wochenordnern, so gehts auch: :froehlich1:

---------------------------------------------------------------------
for %%d In (1 2 3 4 5 6 7 8 9 10 ) do md woche%%d
---------------------------------------------------------------------


___________________________________________
Schade das mar als Gast nicht editieren kann ;D
 
Thema:

Batch: For Schleifen ???

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben