Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Veränderbare Variable als Sprunkmarke nutzen

Mitglied: Zendara

Zendara (Level 1) - Jetzt verbinden

10.12.2013, aktualisiert 16:15 Uhr, 1319 Aufrufe, 10 Kommentare, 3 Danke

Hallo,

ich möchte eine Variable als Sprungmarke benutzen, damit ich ein Batchfile verkürzen kann.

Als erstes mal den Batch der Funktionier aber zu lange ist.

01.
@echo off 
02.
 
03.
set sprung=1 
04.
set alt=0 
05.
 
06.
:start 
07.
if %sprung%==1 call :1 
08.
if %sprung%==2 call :2 
09.
if %sprung%==3 call :3 
10.
if %sprung%==4 call :4 
11.
if %sprung%==5 call :5 
12.
if %sprung%==6 goto fertig 
13.
goto exit 
14.
 
15.
:1 
16.
	echo - Start 1 
17.
set alt=%sprung% 
18.
	echo Sprung ist jetzt: %Sprung% 
19.
set /a sprung=%sprung%+1 
20.
	echo %alt%+1=%sprung% 
21.
ping localhost -n 2 >nul 
22.
goto start 
23.
 
24.
:2 
25.
	echo - Start 2 
26.
set alt=%sprung% 
27.
	echo Sprung ist jetzt: %Sprung% 
28.
set /a sprung=%sprung%+1 
29.
	echo %alt%+1=%sprung% 
30.
ping localhost -n 2 >nul 
31.
goto start 
32.
 
33.
:3 
34.
	echo - Start 3 
35.
set alt=%sprung% 
36.
	echo Sprung ist jetzt: %Sprung% 
37.
set /a sprung=%sprung%+1 
38.
	echo %alt%+1=%sprung% 
39.
ping localhost -n 2 >nul 
40.
goto start 
41.
 
42.
:4 
43.
	echo - Start 4 
44.
set alt=%sprung% 
45.
	echo Sprung ist jetzt: %Sprung% 
46.
set /a sprung=%sprung%+1 
47.
	echo %alt%+1=%sprung% 
48.
ping localhost -n 2 >nul 
49.
goto start 
50.
 
51.
:5 
52.
	echo - Start 5 
53.
set alt=%sprung% 
54.
	echo Sprung ist jetzt: %Sprung% 
55.
set /a sprung=%sprung%+1 
56.
	echo %alt%+1=%sprung% 
57.
ping localhost -n 2 >nul 
58.
goto start 
59.
 
60.
:exit 
61.
pause 
62.
exit 
63.
 
64.
:fertig 
65.
	echo ========== 
66.
	echo  Fertig 
67.
	echo ========== 
68.
ping localhost -n 5 >nul 
69.
goto exit
Nun habe ich das File abgekürzt...

01.
@echo off 
02.
 
03.
set sprung=1 
04.
set alt=1 
05.
 
06.
:start 
07.
if %sprung%==6 goto fertig 
08.
if %sprung%==%sprung% call :%sprung% 
09.
goto exit 
10.
 
11.
rem Diese Einstiegspunkte möchte ich mir ersparen. Ab hier bis... 
12.
:1 
13.
:2 
14.
:3 
15.
:4 
16.
:5 
17.
rem ...bis hier. 
18.
 
19.
rem hier will ich rein springen bzw. mit call aufrufen 
20.
:%sprung% 
21.
	echo - Start %sprung% 
22.
set alt=%sprung% 
23.
	echo Sprung ist jetzt: %Sprung% 
24.
set /a sprung=%sprung%+1 
25.
	echo %alt%+1=%sprung% 
26.
ping localhost -n 2 >nul 
27.
goto start 
28.
 
29.
:exit 
30.
pause 
31.
exit 
32.
 
33.
:fertig 
34.
	echo ========== 
35.
	echo  Fertig 
36.
	echo ========== 
37.
ping localhost -n 5 >nul 
38.
goto exit
Leider Funktioniert der Sprung zu :%sprung% nicht und ich muss immer :1, :2, :3,... vorher schreiben damit das File seinen Weg findet.
Die Ausgabe von %sprung% ist zwar richtig aber er kann scheinbar auf keine Variable springen.

Hat jemand eine Idee wie ich das lösen kann?
Ich hab auch ihr im Forum ähnliche Beiträge gefunden die mich aber nicht weiter brachten

Danke
Lg
Zendara
Mitglied: bastla
LÖSUNG 10.12.2013, aktualisiert um 16:10 Uhr
Hallo Zendara!

Als Sprungmarke ":%sprung%" zu verwenden wird sich nicht realisieren lassen - es sollte aber auch überhaupt nicht nötig sein, wenn offensichtlich im Unterprogramm ohnehin immer das Gleiche passieren soll ...

Du kannst dazu eine festen Namen (etwa ":Unterprogramm") verwenden und dann immer dieses Label als Ziel des "call" angeben (die Variable %sprung% hast Du ja im Unterprogramm zur Verfügung) bzw, je nachdem, was Du tatsächlich vorhast, auch einfach eine "for /L"-Schleife verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: Zendara
10.12.2013 um 16:13 Uhr
Hallo Bastla,

danke für deine Antwort das hat mir schon mal sehr weitergeholfen.
Ich hab jetzt zwar noch ein paar Probleme in dem Batchfile welches mit der Frage zutun hat, aber ich muss noch das eigentliche Problem eingrenzen.

Lg
Zendara
Bitte warten ..
Mitglied: Zendara
10.12.2013 um 17:39 Uhr
Ich Bin mir jetzt nicht mal sicher ob diese Batch Datei zu dem von mir erstellten Thema passt, aber vielleicht hat es ja mit dem von dir angesprochenen For /L zu tun.

01.
@echo off 
02.
cls 
03.
title Netzwerk Serverabfrage @Firma 
04.
 
05.
if exist Verbindungsfehler.log del Verbindungsfehler.log 
06.
 
07.
set IP1=www.google.at& 		set Aufloesung1=www.google.at 
08.
set IP2=192.168.0.2& 		set Aufloesung2=Rechner1 
09.
set IP3=192.168.0.3& 		set Aufloesung3=Rechner2 
10.
set IP4=192.168.0.6& 		set Aufloesung4=Rechner3 
11.
set IP5=192.168.0.7& 		set Aufloesung5=Rechner4 
12.
set IP6=192.168.0.19& 		set Aufloesung6=Rechner5 
13.
set IP7=192.168.0.21& 		set Aufloesung7=Rechner6 
14.
set IP8=192.168.0.12& 		set Aufloesung8=Rechner7 
15.
set IP9=192.168.0.13& 		set Aufloesung9=Rechner8 
16.
set IP10=192.168.0.14& 		set Aufloesung10=Rechner9 
17.
set IP11=192.168.0.15& 		set Aufloesung11=Rechner10 
18.
set IP12=192.168.0.16& 		set Aufloesung12=Rechner11 
19.
set IP13=192.168.0.20& 		set Aufloesung13=Rechner12 
20.
set IP14=192.168.0.128& 	set Aufloesung14=Rechner13 
21.
set IP15=192.168.8.1& 		set Aufloesung15=Rechner14 
22.
set IP16=192.168.8.2& 		set Aufloesung16=Rechner15 
23.
set IP17=192.168.8.3& 		set Aufloesung17=Rechner16 
24.
set IP18=192.168.8.4& 		set Aufloesung18=Rechner17 
25.
set IP19=192.168.8.5& 		set Aufloesung19=Rechner18 
26.
set IP20=172.123.123.123& 	set Aufloesung20=Rechner19 
27.
cls 
28.
goto start 
29.
 
30.
:start 
31.
set next=0 
32.
set AktionEnde=0 
33.
goto Vorbereitung 
34.
 
35.
:Vorbereitung 
36.
rem --------------- Hier ist der Fehler --------------- 
37.
set /a AktionEnde=%AktionEnde%+1 
38.
	echo ------------- %AktionEnde% 
39.
set /a next=%next%+1 
40.
	echo ------------- %next% 
41.
set Aufloesung=Aufloesung%next% 
42.
	echo ------------- %Aufloesung% 
43.
set Ziel=IP%next% 
44.
	echo ------------- %Ziel% 
45.
::set Ziel=%IP1% 
46.
goto Aktion 
47.
 
48.
:Aktion 
49.
goto Anzeige 
50.
 
51.
:Anzeige 
52.
	echo. 
53.
	echo ======================== 
54.
rem --------------- %Aufloesung% hat zwar den Wert Aufloesung1 aber dieser Wert kann nicht auf www.google.at verweisen --------------- 
55.
	echo  Ping auf %Aufloesung% 
56.
	echo ======================== 
57.
goto Aktion2 
58.
 
59.
:Aktion2 
60.
rem --------------- %ziel% hat zwar den Wert zB. IP1 aber dieser Wert kann nicht auf www.google.at verweisen --------------- 
61.
ping %ziel% -n 2 | find "TTL=" 
62.
::ping %IP1% 
63.
::ping %ziel% 
64.
set elevel=%Errorlevel% 
65.
	echo ------------- %elevel% 
66.
if %elevel%==0 echo OK 
67.
if %elevel%==0 goto Vorbereitung 
68.
if %elevel%==1 echo Keiner Verbindung zu %Aufloesung%! 
69.
if %elevel%==1 goto Fehler 
70.
goto falscherEL 
71.
 
72.
:falscherEL 
73.
	echo Errorlevel von Ping ist nicht falsch! %elevel% 
74.
pause 
75.
goto exit 
76.
 
77.
:ende 
78.
	echo. 
79.
	echo Verbindungstest durchgefuehrt 
80.
	echo. 
81.
start Verbindungsfehler.log 
82.
goto exit 
83.
 
84.
:Fehler 
85.
	echo %date% %time% Keine Verbindung zu %Aufloesung% %Ziel% >>Verbindungsfehler.log 
86.
goto box 
87.
	 
88.
:box 
89.
	echo msgbox"Fehlerhafte Verbindung zu %Aufloesung% %Ziel%. Zeitueberschreitung der Anforderung! Errorlevel = %elevel%",0,"Verbindungsfehler" >%Ziel%.vbs  
90.
ping localhost -n 3 -w 1000 >NUL 
91.
start %Ziel%.vbs 
92.
ping %Ziel% -n 4 
93.
del %Ziel%.vbs 
94.
goto %next% 
95.
 
96.
:exit 
97.
	echo EXIT 
98.
pause 
99.
exit
Den Bereich wo der Fehler entsteht ( damit meine ist jetzt nicht den Inhalt des Sessels der vor meinem PC steht) habe ich mit rem makeirt.
Ich will in einer Variable wieder den Nummernteil ändern was mit Echo angezeigt wird aber die Variable unbrachbar macht.

lg
Zendara
Bitte warten ..
Mitglied: Endoro
10.12.2013 um 20:53 Uhr
Hey, warum sollte eine konstante Zeichenkette mit einer Variablen eine neue Variable ergeben und wie sollte der Interpreter das erkennen? Ich gebe aber zu, dass sich deine Lösung iwie aufdrängt, ich seh' sie bestimmt 2x/Woche
01.
@ECHO OFF &SETLOCAL 
02.
set "IP1=www.google.at" 
03.
set "Aufloesung1=www.google.at" 
04.
set /a next=0 
05.
set /a AktionEnde=0 
06.
rem --------------- Hier war der Fehler --------------- 
07.
set /a AktionEnde+=1 
08.
	echo ------------- %AktionEnde% 
09.
set /a next+=1 
10.
	echo ------------- %next% 
11.
call set "Aufloesung=%%Aufloesung%next%%%" 
12.
	echo ------------- %Aufloesung% 
13.
call set "Ziel=%%IP%next%%%" 
14.
	echo ------------- %Ziel% 
15.
 
Es gibt noch andere Wege, über Forschleifen und delayed expansion.
lg.
Bitte warten ..
Mitglied: bastla
10.12.2013, aktualisiert um 21:21 Uhr
Hallo Zendara & Endoro!

Es stellt sich ohnehin die Frage, wozu dieses Pseudo-Array gut sein soll - das ließe sich doch zB auch mit einer Liste in einer Textdatei oder auch im Batch selbst - also (vereinfacht) etwa mit
01.
@echo off & setlocal 
02.
cls 
03.
title Netzwerk Serverabfrage @Firma 
04.
 
05.
REM DATA	www.google.at	www.google.at 
06.
REM DATA	192.168.0.2	Rechner1 
07.
REM DATA	192.168.0.3	Rechner2 
08.
REM DATA	192.168.0.6	Rechner3 
09.
 
10.
set "Log=Verbindungsfehler.log" 
11.
set "box=%temp%\box.vbs" 
12.
 
13.
if exist "%Log%" del "%Log%" 
14.
>"%box%" echo Set a=WScript.Arguments: Msgbox "Fehlerhafte Verbindung zu "^&a(0)^&" "^&a(1)^&". Zeitueberschreitung der Anforderung!",0,"Verbindungsfehler" 
15.
 
16.
for /f "tokens=3,4" %%a in ('findstr /bc:"REM DATA" "%~0"') do ( 
17.
    echo. 
18.
    echo ======================== 
19.
    echo  Ping auf %%b 
20.
    echo ======================== 
21.
    ping %%a -n 2 | find "TTL=" && ( 
22.
        echo OK 
23.
    ) || ( 
24.
        echo Keine Verbindung zu %%b! 
25.
        >>Verbindungsfehler.log echo %date% %time% Keine Verbindung zu %%b %%a 
26.
        start %box% %%b %%a 
27.
        ping localhost -n 3 -w 1000 >NUL 
28.
29.
30.
echo. 
31.
echo Verbindungstest durchgefuehrt 
32.
echo. 
33.
if exist "%Log%" start notepad "%Log%"
lösen ...

Grüße
bastla
Bitte warten ..
Mitglied: Endoro
10.12.2013 um 21:34 Uhr
Zitat von bastla:
Es stellt sich ohnehin die Frage, wozu dieses Pseudo-Array gut sein soll
Mmm, ich muss die immer verteidigen, diese assoziativen Arrays. Dadurch wird Batch erst richtig schön
lg.
Bitte warten ..
Mitglied: bastla
10.12.2013 um 21:40 Uhr
Hallo Endoro!

Lass ich mir noch einreden, wenn ich den Index nachträglich für eine Auswahl (zB aus einer dynamisch erstellten Dateiliste) verwenden will - aber hier?

Grüße
bastla
Bitte warten ..
Mitglied: Zendara
11.12.2013 um 15:22 Uhr
Hallo,

danke euch für die Antworten und Beispiele.
Ich bin gerade dabei mich durch den von euch empfolenen Befehl For zu lesen.
Bis jetzt kann ich aber nur raten was da passiert.

for /f "tokens=3,4" %%a in ('findstr /bc:"REM DATA" "%~0"') do ( ....

Es werden die Werte aus REM DATA geladen wobei mit token 3,4 auf IP und Namen verwiesen wird.
%%a ist die Variable von IP, %%b von Name.
findstr durchsucht das aktuelle File vom Zeichenanfang nach einer bestimmten Zeichenfolge, aus %~0 kann ich mir keinen Reim machen.

Ich hab jetzt einfach mal ganz frech das umgeschriebene Batchfile übernommen. Der Ping läuft durch und öffnet danach auch das Text File mit den nicht erreichbaren PC´s. Das Fenster kommt auch sobald ein Client nicht erreichbar ist

ping %%a -n 2 | find "TTL=" && (...

Warum die Ergänzung mit >nul beim ping nicht geht verstehe ich nicht. Benötigt "find" die Ausgabe?

Auf jedenfall Danke euch für die Mühe, ich kenn jetzt meinen Batch nicht mehr ;)

Lg
Zendara
Bitte warten ..
Mitglied: bastla
11.12.2013 um 17:02 Uhr
Hallo Zendara!
Bis jetzt kann ich aber nur raten was da passiert.
Gut geraten.
aus %~0 kann ich mir keinen Reim machen.
Das ist die Batchdatei selbst ("findstr" sucht nicht automatisch in der aktuellen Datei und benötigt daher diese Information).
Warum die Ergänzung mit >nul beim ping nicht geht verstehe ich nicht. Benötigt "find" die Ausgabe?
Letzteres natürlich - allerdings sollte
ping %%a -n 2 | find "TTL=" >nul && (
die unerwünschten Ausgaben verschwinden lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: Zendara
11.12.2013 um 17:10 Uhr
Super Danke
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Variablen Nutzen welche aus dem Inhalt von Variablen erstellt werden
gelöst Frage von der-blobBatch & Shell4 Kommentare

Hallo Zusammen, der Titel ist zwar nicht direkt aussage kräftig, aber jedoch weis ich nicht wie ich es beschreiben ...

PHP
Preg-replace mit Variablen nutzen
gelöst Frage von rzlbrnftPHP1 Kommentar

Ich möchte gerne ein kleines Joomla Tool umschreiben weil sich der Code für das preg_replace mittlerweile geändert hat. Es ...

Batch & Shell
Zeit als Variable für Entscheidungen nutzen
gelöst Frage von DaTobsnBatch & Shell2 Kommentare

Hi! Und zwar will ich eine Batch-Datei erstellen, die, wenn ich sie starte, mich begrüßt. Dies soll aber Zeitabhängig ...

Batch & Shell
Laufwerksbezeichnung (label) in Batch als Variable nutzen
gelöst Frage von tobias.mockBatch & Shell21 Kommentare

Hallo zusammen, ich bin sicher, dass meine Frage für alle Experten hier viel zu simpel ist, ich bin aber ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 12 StundenRouter & Routing2 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 19 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 1 TagMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...