bloodyniner
Goto Top

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.
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

Content-ID: 2592609549

Url: https://administrator.de/contentid/2592609549

Ausgedruckt am: 23.11.2024 um 11:11 Uhr

miniversum
Lösung miniversum 25.04.2022 um 10:58:57 Uhr
Goto Top
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ß
...
BloodyNiner
BloodyNiner 25.04.2022 um 12:17:14 Uhr
Goto Top
Dankeschön !

Habs mit beiden Varianten hinbekommen.