Variablentransfer in Batch
Hallo zusammen,
nachdem ich bisher alles über diverse Suchfunktionen fand ist nun die Zeit gekommen wo ich aktiv eine Frage stellen muss. Die Funktionalität selbst hab ich hinbekommen aber bei der grafischen Aufarbeitung stehe ich nun auf dem Schlauch.
Ich hoffe mir kann jemand sagen warum dieser Testscript das macht was er soll.
Nämlich die Ausgabe
Rechner1 Rechner2 Rechner3 Rechner4 Rechner5
und dann nach einem Tastendruck
Rechner2 Rechner3 Rechner4 Rechner5 Rechner1
usw. zu erzeugen.
Dies aber wenn ich es folgendermaßen einsetze will gnadenlos versagt.
Es erscheint nämlich immer jedes Mal die Anzeige
x
xx
xxx
xxxx
xxxxx
unter dem Rahmen
Gruß Logen
nachdem ich bisher alles über diverse Suchfunktionen fand ist nun die Zeit gekommen wo ich aktiv eine Frage stellen muss. Die Funktionalität selbst hab ich hinbekommen aber bei der grafischen Aufarbeitung stehe ich nun auf dem Schlauch.
Ich hoffe mir kann jemand sagen warum dieser Testscript das macht was er soll.
echo off
set para0=.
set para1=Rechner1
set para2=Rechner2
set para3=Rechner3
set para4=Rechner4
set para5=Rechner5
:SCHLEIFE
echo %para1% %para2% %para3% %para4% %para5%
set para0=%para1%
set para1=%para2%
set para2=%para3%
set para3=%para4%
set para4=%para5%
set para5=%para0%
pause
goto SCHLEIFE
Nämlich die Ausgabe
Rechner1 Rechner2 Rechner3 Rechner4 Rechner5
und dann nach einem Tastendruck
Rechner2 Rechner3 Rechner4 Rechner5 Rechner1
usw. zu erzeugen.
Dies aber wenn ich es folgendermaßen einsetze will gnadenlos versagt.
@Echo off
rem SetLocal EnableDelayedExpansion
title Toolkit
color 0A
mode con lines=14 cols=40
set pdatum=%date%
set pzeit=%time%
if "%pzeit:~0,1%"==" " (
set logfile=%~n0_%pdatum:~6,4%_%pdatum:~3,2%_%pdatum:~0,2%_0%pzeit:~1,1%_%pzeit:~3,2%_%pzeit:~6,2%
) else (
set logfile=%~n0_%pdatum:~6,4%_%pdatum:~3,2%_%pdatum:~0,2%_%pzeit:~0,2%_%pzeit:~3,2%_%pzeit:~6,2%
)
>%logfile%.log echo ***Beginn*** Datum: %pdatum% Uhrzeit: %pzeit%
1>>%logfile%.log 2>&1 echo .
1>>%logfile%.log 2>&1 echo .
set para1=x
set para2=xx
set para3=xxx
set para4=xxxx
set para5=xxxxx
For /f %%i IN (datei) DO (
1>>%logfile%.log 2>&1 echo ----- %%i -----
set para1=%para2%
set para2=%para3%
set para3=%para4%
set para4=%para5%
set para5=%%i
cls
echo ╔════════════════════════════════════╗
echo ║ ║
echo ║ Folgende Rechner werden geprüft ║
echo ║ ║
echo ╚════════════════════════════════════╝
echo %para1%
echo %para2%
echo %para3%
echo %para4%
echo %para5%
echo %%i
rem die Pause ersetzt die Aktionen
pause
rem ***** Hier kommen die Aktionen hin *****
1>>%logfile%.log 2>&1 echo .
)
Es erscheint nämlich immer jedes Mal die Anzeige
x
xx
xxx
xxxx
xxxxx
unter dem Rahmen
Gruß Logen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2592609549
Url: https://administrator.de/contentid/2592609549
Ausgedruckt am: 23.11.2024 um 11:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
der Unterschied ist, das du in deinem Testskript mit goto arbeitest, später dnan aber eine For Schleife hast.
Bei der FOR Schleife werden alle Variabeln die im Ausführungblock (der Teil zwischen den Klammern) vorher ausgelöst und dann immer, mit jedem %%i Durchlauf mit dem gleichen Wertt verarbeitet. Beim Goto werden sie in jeder Zeile neu aufgelöst.
Um das Ganze zu umgehen kannst du entweder mit "enabledelayedexpansion" arbeiten oder den Teil in Klammern in eine Unterprozedur auslagern, die du mit Call aufrufen kannst. Der Unterprozedur kannst du %%i als Parameter mitgeben der in der Prozedur dann als %1 nutzbar wird.
Gruß
...
der Unterschied ist, das du in deinem Testskript mit goto arbeitest, später dnan aber eine For Schleife hast.
Bei der FOR Schleife werden alle Variabeln die im Ausführungblock (der Teil zwischen den Klammern) vorher ausgelöst und dann immer, mit jedem %%i Durchlauf mit dem gleichen Wertt verarbeitet. Beim Goto werden sie in jeder Zeile neu aufgelöst.
Um das Ganze zu umgehen kannst du entweder mit "enabledelayedexpansion" arbeiten oder den Teil in Klammern in eine Unterprozedur auslagern, die du mit Call aufrufen kannst. Der Unterprozedur kannst du %%i als Parameter mitgeben der in der Prozedur dann als %1 nutzbar wird.
Gruß
...