Vergessliche Schleife
Hallo in die Runde.
Sollte es mir bei der Suche entgangen sein, dass die Frage bereits behandelt wurde, so bitte ich um Nachsicht.
Nicht nur ich bin neu hier im Forum, die Batchverarbeitung ist auch noch sehr neu für mich.
Habe nun eine vorhandene Batch-Datei geringfügig erforlgreich angepasst und vom (Anfänger)-Glück beseelt mich bei weiteren Änderungen verhaspelt.
Und das sind die Beteiligten:
- die auszuführende Anwendung "befehl.exe"
- die Datei "kundennr.txt" mit wenigen Kundennummern
- die Datei "parameter.txt" mit Parametern
- die Datei "gesperrt.txt", diese Datei verhindert den Start der Anwendung "befehl.exe"
Und das soll gemacht werden:
- zuerst sollen die Kunden aufgelistet werden. Dazu wird die Datei "kundennr.txt" zeilenweise ausgelesen und die Kundennummern per ECHO ausgegeben.
- im zweiten Schritt sollen die Parameter im Klartext angezeigt werden. Dazu wird Datei "parameter.txt" zeilenweise ausgelesen und da es nur wenige sind, werden sie gleich im Klartext angezeigt.
- Pro Kunde soll die Anwednung alle Parameter abarbeiten.
- existiert die Datei "gesperrt.txt", so wird pro Kunde abgefragt, ob die Datei "gesperrt.txt" gelöscht werden soll.
Die Löschung der "gesperrt.txt" pro Kunde ist nun mein Problem. In der Schleife wird der Kunde vergessen!?
Sollte es mir bei der Suche entgangen sein, dass die Frage bereits behandelt wurde, so bitte ich um Nachsicht.
Nicht nur ich bin neu hier im Forum, die Batchverarbeitung ist auch noch sehr neu für mich.
Habe nun eine vorhandene Batch-Datei geringfügig erforlgreich angepasst und vom (Anfänger)-Glück beseelt mich bei weiteren Änderungen verhaspelt.
Und das sind die Beteiligten:
- die auszuführende Anwendung "befehl.exe"
- die Datei "kundennr.txt" mit wenigen Kundennummern
- die Datei "parameter.txt" mit Parametern
- die Datei "gesperrt.txt", diese Datei verhindert den Start der Anwendung "befehl.exe"
Und das soll gemacht werden:
- zuerst sollen die Kunden aufgelistet werden. Dazu wird die Datei "kundennr.txt" zeilenweise ausgelesen und die Kundennummern per ECHO ausgegeben.
- im zweiten Schritt sollen die Parameter im Klartext angezeigt werden. Dazu wird Datei "parameter.txt" zeilenweise ausgelesen und da es nur wenige sind, werden sie gleich im Klartext angezeigt.
- Pro Kunde soll die Anwednung alle Parameter abarbeiten.
- existiert die Datei "gesperrt.txt", so wird pro Kunde abgefragt, ob die Datei "gesperrt.txt" gelöscht werden soll.
Die Löschung der "gesperrt.txt" pro Kunde ist nun mein Problem. In der Schleife wird der Kunde vergessen!?
REM @ECHO OFF
CLS
Setlocal EnableDelayedExpansion
ECHO Folgende Kunden sind gelistet:
FOR /f %%i IN (kundennr.txt) DO (
ECHO - %%i
)
ECHO.
ECHO Folgende Parameter werden in dieser Reihenfolge abgearbeitet:
FOR /f %%y IN (parameter.txt) DO (
IF "%%y"====parameter1! ECHO - Klartext_fuer_parameter_1
IF "%%y"====parameter2! ECHO - Klartext_fuer_parameter_2
IF "%%y"====parameter3! ECHO - Klartext_fuer_parameter_3
)
ECHO.
PAUSE
ECHO.
FOR /f %%i IN (kundennr.txt) DO (
ECHO.
ECHO Kunde: %%i Start !time:~0,8! Uhr
:: Abfrage, ob bei Vorhandensein die Datei gesperrt.txt gelöscht werden soll.
:Beginn
IF NOT EXIST gesperrt.txt GOTO Weiter
IF EXIST gesperrt.txt ECHO Anwenung gesperrt & goto Frage
:Frage
ECHO Um fortzufahren muss die Datei gesperrt.txt geloescht werden.
SET /p wahl=Wollen Sie die Datei gesperrt.txt jetzt loeschen? (J N) & goto Antwort
:Antwort
FOR %%a IN (J N) DO IF /i '!wahl!'=='%%a' GOTO Wahl%%a
ECHO.
ECHO Ungueltige Antwort, nur (J N) & goto Frage
:WahlN
ECHO.
ECHO Sie haben NEIN gewaehlt, Anwendung abgebrochen.
GOTO Ende
:WahlJ
DEL gesperrt.txt
ECHO.
ECHO Sie haben JA gewaehlt, die Datei gesperrt.txt wurde geloescht.
ECHO Anwendung gestartet.
ECHO.
ECHO Kunde: %%i Start !time:~0,8! Uhr
:Weiter
ECHO.
FOR /f %%y IN (parameter.txt) DO (
IF "%%y"====parameter1! ECHO.|set /p =- Klartext_fuer_parameter_1 wird durgefuehrt
IF "%%y"====parameter2! ECHO.|set /p =- Klartext_fuer_parameter_2 wird durgefuehrt
IF "%%y"====parameter3! ECHO.|set /p =- Klartext_fuer_parameter_3 wird durgefuehrt
start befehl.exe
ECHO Beendet !time:~0,8! Uhr
)
)
ECHO.
ECHO Abgeschlossen %date:~0% - %time:~0,8% Uhr.
:ENDE
ENDLOCAL
ECHO.
PAUSE
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 172490
Url: https://administrator.de/contentid/172490
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
6 Kommentare
Neuester Kommentar
moin und willkommen
Würde ich "so" malen
Das watr das allererste grob geschnitten gefundene - aber wo hängst denn bei dir genau?
Mit anderen Worten, die Fehlerfunde haben keinen Anspruch auf Vollständigkeit.
Gruß
- nimm bitte bitte bitte bitte bitte bitte bitte bitte bitte das vermaledeite @echo off raus, bis die Batch Wasserdicht ist.
- dann hast du beim umwerklen offenbar hier (Zeile 11-13, 46-48) einen Bock geschossen.
IF %%y!==parameter1! ECHO
IF "%%y"===="parameter1!" ECHO
Das watr das allererste grob geschnitten gefundene - aber wo hängst denn bei dir genau?
Mit anderen Worten, die Fehlerfunde haben keinen Anspruch auf Vollständigkeit.
Gruß
Hallo und willkommen,
ich denke das folgende ist ein wenig problematisch
Da %wahl% nicht mehr expandiert wird weil es in einem Block liegt (soviel zur täglich wiederkehrenden Frage).
Da wäre ein !wahl! mit aktiviertem delayed expansion die bessere Wahl (Ist ja eh schon aktiv).
jeb
ich denke das folgende ist ein wenig problematisch
FOR /f %%i IN (kundennr.txt) DO (
....
SET /p wahl=Wollen Sie die Datei gesperrt.txt jetzt loeschen? (J N) & goto Antwort
:Antwort
FOR %%a IN (J N) DO IF /i '%wahl%'=='%%a' GOTO Wahl%%a
Da %wahl% nicht mehr expandiert wird weil es in einem Block liegt (soviel zur täglich wiederkehrenden Frage).
Da wäre ein !wahl! mit aktiviertem delayed expansion die bessere Wahl (Ist ja eh schon aktiv).
jeb
Zitat von @60730:
aber wo hängst denn bei dir genau?
aber wo hängst denn bei dir genau?
Aloha T-Mo,
na beim Schildern des Problems
Den Ist-Zustand dürfen wir uns im Skript zurechtmausern, immerhin gibt er den Soll-Zustand vor ...
Wie war das mit
GOTO
innerhalb der Schleife? Glaube da stand etwas in unserem schönen Tutorial zur FOR-Schleife ...Wer mag Böcke?
greetz André
P.S.:
:ENDE
ENDLOCAL
Aloha,
Statt
hier mal ein kurzes Beispiel für die Abfrage und {{
greetz André
Statt
GOTO
solltest du dann eventuell das Arbeiten mit CALL :Sprungmarke
versuchen hier mal ein kurzes Beispiel für die Abfrage und {{
@echo off & setlocal enabledelayedexpansion
for %%s in (echo) do (
:Frage
set /p wahl=Ja oder Nein
if /i !wahl!==J (
echo JA
) else (
if /i !wahl!==N (
echo Nein
) else (
echo falsche Eingabe && call :Frage
goto :eof
)
)
)
echo weiter geht's
pause
greetz André