Veränderbare Variable als Sprunkmarke nutzen
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.
Nun habe ich das File abgekürzt...
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
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.
@echo off
set sprung=1
set alt=0
:start
if %sprung%==1 call :1
if %sprung%==2 call :2
if %sprung%==3 call :3
if %sprung%==4 call :4
if %sprung%==5 call :5
if %sprung%==6 goto fertig
goto exit
:1
echo - Start 1
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:2
echo - Start 2
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:3
echo - Start 3
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:4
echo - Start 4
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:5
echo - Start 5
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:exit
pause
exit
:fertig
echo ==========
echo Fertig
echo ==========
ping localhost -n 5 >nul
goto exit
Nun habe ich das File abgekürzt...
@echo off
set sprung=1
set alt=1
:start
if %sprung%==6 goto fertig
if %sprung%==%sprung% call :%sprung%
goto exit
rem Diese Einstiegspunkte möchte ich mir ersparen. Ab hier bis...
:1
:2
:3
:4
:5
rem ...bis hier.
rem hier will ich rein springen bzw. mit call aufrufen
:%sprung%
echo - Start %sprung%
set alt=%sprung%
echo Sprung ist jetzt: %Sprung%
set /a sprung=%sprung%+1
echo %alt%+1=%sprung%
ping localhost -n 2 >nul
goto start
:exit
pause
exit
:fertig
echo ==========
echo Fertig
echo ==========
ping localhost -n 5 >nul
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 224153
Url: https://administrator.de/forum/veraenderbare-variable-als-sprunkmarke-nutzen-224153.html
Ausgedruckt am: 22.12.2024 um 22:12 Uhr
10 Kommentare
Neuester Kommentar
Hallo Zendara!
Als Sprungmarke "
Du kannst dazu eine festen Namen (etwa "
Grüße
bastla
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
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
Es gibt noch andere Wege, über Forschleifen und
lg.
@ECHO OFF &SETLOCAL
set "IP1=www.google.at"
set "Aufloesung1=www.google.at"
set /a next=0
set /a AktionEnde=0
rem --------------- Hier war der Fehler ---------------
set /a AktionEnde+=1
echo ------------- %AktionEnde%
set /a next+=1
echo ------------- %next%
call set "Aufloesung=%%Aufloesung%next%%%"
echo ------------- %Aufloesung%
call set "Ziel=%%IP%next%%%"
echo ------------- %Ziel%
delayed expansion
.lg.
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
lösen ...
Grüße
bastla
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
@echo off & setlocal
cls
title Netzwerk Serverabfrage @Firma
REM DATA www.google.at www.google.at
REM DATA 192.168.0.2 Rechner1
REM DATA 192.168.0.3 Rechner2
REM DATA 192.168.0.6 Rechner3
set "Log=Verbindungsfehler.log"
set "box=%temp%\box.vbs"
if exist "%Log%" del "%Log%"
>"%box%" echo Set a=WScript.Arguments: Msgbox "Fehlerhafte Verbindung zu "^&a(0)^&" "^&a(1)^&". Zeitueberschreitung der Anforderung!",0,"Verbindungsfehler"
for /f "tokens=3,4" %%a in ('findstr /bc:"REM DATA" "%~0"') do (
echo.
echo ========================
echo Ping auf %%b
echo ========================
ping %%a -n 2 | find "TTL=" && (
echo OK
) || (
echo Keine Verbindung zu %%b!
>>Verbindungsfehler.log echo %date% %time% Keine Verbindung zu %%b %%a
start %box% %%b %%a
ping localhost -n 3 -w 1000 >NUL
)
)
echo.
echo Verbindungstest durchgefuehrt
echo.
if exist "%Log%" start notepad "%Log%"
Grüße
bastla
Mmm, ich muss die immer verteidigen, diese assoziativen Arrays. Dadurch wird Batch erst richtig schön
lg.
lg.
Hallo Zendara!
die unerwünschten Ausgaben verschwinden lassen ...
Grüße
bastla
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 sollteping %%a -n 2 | find "TTL=" >nul && (
Grüße
bastla