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

Vergessliche Schleife

Frage Entwicklung Batch & Shell

Mitglied: Johtoe

Johtoe (Level 1) - Jetzt verbinden

02.09.2011, aktualisiert 13:56 Uhr, 2552 Aufrufe, 6 Kommentare

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!?

01.
REM @ECHO OFF 
02.
CLS 
03.
Setlocal EnableDelayedExpansion 
04.
ECHO Folgende Kunden sind gelistet: 
05.
FOR /f %%i IN (kundennr.txt) DO ( 
06.
	ECHO - %%i 
07.
08.
ECHO. 
09.
ECHO Folgende Parameter werden in dieser Reihenfolge abgearbeitet: 
10.
FOR /f %%y IN (parameter.txt) DO (  
11.
	IF "%%y"====parameter1! ECHO - Klartext_fuer_parameter_1 
12.
	IF "%%y"====parameter2! ECHO - Klartext_fuer_parameter_2 
13.
	IF "%%y"====parameter3! ECHO - Klartext_fuer_parameter_3 
14.
15.
ECHO. 
16.
PAUSE 
17.
ECHO. 
18.
FOR /f %%i IN (kundennr.txt) DO (  
19.
	ECHO. 
20.
	ECHO Kunde: %%i Start !time:~0,8! Uhr 
21.
:: Abfrage, ob bei Vorhandensein die Datei gesperrt.txt gelöscht werden soll. 
22.
	:Beginn 
23.
	IF NOT EXIST gesperrt.txt GOTO Weiter 
24.
	IF EXIST gesperrt.txt ECHO Anwenung gesperrt & goto Frage 
25.
	:Frage  
26.
	ECHO Um fortzufahren muss die Datei gesperrt.txt geloescht werden. 
27.
	SET /p wahl=Wollen Sie die Datei gesperrt.txt jetzt loeschen? (J N) & goto Antwort 
28.
	:Antwort 
29.
	FOR %%a IN (J N) DO IF /i '!wahl!'=='%%a' GOTO Wahl%%a  
30.
	ECHO. 
31.
	ECHO Ungueltige Antwort, nur (J N) & goto Frage  
32.
	:WahlN  
33.
	ECHO. 
34.
	ECHO Sie haben NEIN gewaehlt, Anwendung abgebrochen. 
35.
	GOTO Ende  
36.
	:WahlJ  
37.
	DEL gesperrt.txt  
38.
	ECHO. 
39.
	ECHO Sie haben JA gewaehlt, die Datei gesperrt.txt wurde geloescht. 
40.
	ECHO Anwendung gestartet. 
41.
	ECHO. 
42.
	ECHO Kunde: %%i  Start   !time:~0,8! Uhr  
43.
	:Weiter 
44.
	ECHO. 
45.
		FOR /f %%y IN (parameter.txt) DO (  
46.
		IF "%%y"====parameter1! ECHO.|set /p =- Klartext_fuer_parameter_1 wird durgefuehrt 
47.
		IF "%%y"====parameter2! ECHO.|set /p =- Klartext_fuer_parameter_2 wird durgefuehrt 
48.
		IF "%%y"====parameter3! ECHO.|set /p =- Klartext_fuer_parameter_3 wird durgefuehrt 
49.
		start befehl.exe  
50.
		ECHO  Beendet !time:~0,8! Uhr 
51.
52.
53.
ECHO. 
54.
ECHO Abgeschlossen %date:~0% - %time:~0,8% Uhr. 
55.
:ENDE 
56.
ENDLOCAL 
57.
ECHO. 
58.
PAUSE
Mitglied: 60730
02.09.2011 um 13:24 Uhr
moin und willkommen

  • 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
Würde ich "so" malen
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ß
Bitte warten ..
Mitglied: jeb-the-batcher
02.09.2011 um 13:30 Uhr
Hallo und willkommen,

ich denke das folgende ist ein wenig problematisch
01.
FOR /f %%i IN (kundennr.txt) DO (   
02.
       .... 
03.
	SET /p wahl=Wollen Sie die Datei gesperrt.txt jetzt loeschen? (J N) & goto Antwort  
04.
	:Antwort  
05.
	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
Bitte warten ..
Mitglied: Skyemugen
02.09.2011 um 14:11 Uhr
Zitat von 60730:
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.:
01.
:ENDE  
02.
ENDLOCAL 
überflüssig
Bitte warten ..
Mitglied: Johtoe
02.09.2011 um 15:39 Uhr
Danke für die schnelle Antworten!

Habe den Quellcode editiert.

@ TimoBeil
Anführungszeichen und die vier Gleichheitszeichen ("" und
) in Zielen 11-13 und 46-48 gesetzt, mit dem Effekt der ausgeblendeten Parameter&Ausgabe in den geänderten Zeilen.

Zu deiner Frage: die Schleife (ab Zeile 18) vergisst die kundennr; z.B. in Zeile 42 sehe ich in der Ausgabe nur "Kunde: %i"


@ jeb-the-batcher
delayed expansion ist gesetzt, der Unterschied zwischen %wahl% und !wahl! ist mir (noch) unbekannt.
Bitte warten ..
Mitglied: Johtoe
02.09.2011 um 17:14 Uhr
Danke für die bisherige Hilfe und insbesondere für den Link zum Tutorial.

So komme ich der Sache näher...
Nach dem ersten Überfliegen sehe ich keine Alternative, als die Abfrage nach der gesperrt.txt und auch deren Behandlung (ab Zeile 21) ohne GOTO in den Griff zu bekommen.

"Mir drei sin furchtbar talentiert – am Selvermache interessiert..."
Nehme die Lektüre mit ins Wochenende. Feuerpause bis dahin.
Bitte warten ..
Mitglied: Skyemugen
02.09.2011 um 17:53 Uhr
Aloha,

nun, zum Einen ist die J N Abfrage auch ohne Schleife machbar, mit reinem if /i und else oder && und || da es nur schwarz oder weiß gibt (außer es tippt jemand K ein ...) ... gilt auch für dein if exist ... eine Abfrage genügt doch

Statt GOTO solltest du dann eventuell das Arbeiten mit CALL :Sprungmarke versuchen

hier mal ein kurzes Beispiel für die Abfrage und {{
01.
@echo off & setlocal enabledelayedexpansion 
02.
for %%s in (echo) do ( 
03.
	:Frage 
04.
	set /p wahl=Ja oder Nein 
05.
	if /i !wahl!==J ( 
06.
		echo JA 
07.
	) else ( 
08.
		if /i !wahl!==N ( 
09.
			echo Nein 
10.
		) else ( 
11.
			echo falsche Eingabe && call :Frage 
12.
			goto :eof 
13.
14.
15.
16.
echo weiter geht's 
17.
pause
greetz André
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Microsoft Office
Internext explorer about:blank auslesen, schleife bis gelanden (1)

Frage von thomas1972 zum Thema Microsoft Office ...

Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...