panda01
Goto Top

Bash Script Windows. Wie funktioniert genau DelayedExpansion in if else?

Guten Morgen allerseits,

ich verstehe nicht, wie DelayedExpansion in bash script funktioniert.
wenn ich zum beispiel folgende Code habe.

set var (Diese Variable ist nicht Integer sagen wir die ist zum Bsp. var = TIME)
set /A var1=wert
set /A var2=wert
set /A var3


if var1==0 && var2== (var3=20)
else if var1==0 (var3=var2)
else var3=var


Dann möchte ich diese Variable var3 irgendwo im Code nutzen aber es geht nicht angeblich muss ich DelayedExpansion nutzen aber ich verstehe wie ich es nutzen soll.
nur Ausrufezeichen (!) zu benutzen hilft nicht.
In andere Sprachen wie z.B Java, C oder Javascript ist ja Kindergarten Code aber hier verbirgt sich ganz andere Ansatz.

Kann mir jemand sagen, wie das Problem zu lösen ist?

Viele Dank im Voraus.

Content-ID: 572668

Url: https://administrator.de/forum/bash-script-windows-wie-funktioniert-genau-delayedexpansion-in-if-else-572668.html

Ausgedruckt am: 10.04.2025 um 12:04 Uhr

Shadowminder
Shadowminder 17.05.2020 um 12:04:03 Uhr
Goto Top
Hi Panda01!

das gleiche Problem hatte ich auch mal.

Schreib einfach setlocal EnableDelayedExpansion nach @echo off in dein programm, und dann kannst du das mit den ausrufezeichen machen.

Merk dir:

DelayedExpansion wurde erst 16 jahre nach Batch eingeführt, es ist also so als würdest du eine erweiterung benutzen, die du ja auch in anderen programmiersprachen am anfang definieren musst.

ich hoffe ich hab dir geholfen.

Schönen Tag dir!
Shadowminder
Shadowminder 17.05.2020 um 12:05:49 Uhr
Goto Top
PS: ein beispiel aus einem meiner scripte:

@echo off
setlocal EnableDelayedExpansion
for %%a in ("%~dp0*.cfg") do (  
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ "%%~nxa"') do @(  
for /L %%a in (1,1,1) do @if %%i==%%a @set ip=%%j
)
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ "%%~nxa"') do @(  
for /L %%a in (2,1,2) do @if %%i==%%a @set private=%%j
)
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ "%%~nxa"') do @(  
for /L %%a in (8,1,8) do @if %%i==%%a @set status=%%j
)
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ "%%~nxa"') do @(  
for /L %%a in (9,1,9) do @if %%i==%%a @set info=%%j
)
if !private:~8!==false (
echo.
echo                                 Name: %%~na [Local Server]
echo                                 Status: !status:~7!
echo                                 IP: !ip:~3!
echo                                 Info: !info:~5!
)
)
....restlicher script...
Penny.Cilin
Penny.Cilin 17.05.2020 um 13:04:27 Uhr
Goto Top
Panda01
Panda01 17.05.2020 um 13:06:51 Uhr
Goto Top
Hallo Shadowmind,

Vielen Lieben dank für die schnelle Antwort.
Ich werde es heute Abend ausprobieren und schreibe ich hier, ob es funktioniert hat.

Ich wünsche dir auch schönen Tag
Panda01
Panda01 17.05.2020 um 13:10:40 Uhr
Goto Top
Hey Penny.Cilin,

Nein ich habe es falsch geschrieben
Ich meine Batch Skripting.

Gruß
Panda01
Penny.Cilin
Penny.Cilin 17.05.2020 um 13:24:57 Uhr
Goto Top
Zitat von @Panda01:

Hey Penny.Cilin,

Nein ich habe es falsch geschrieben
Ich meine Batch Skripting.
Dann bitte ändere den Titel Deiner Frage. - Danke.
Das kannst Du auch im Nachhinein machen.

Gruß
Panda01

Gruss Penny.
Shadowminder
Shadowminder 18.05.2020 um 14:44:30 Uhr
Goto Top
Hi Panda01,

funktioniert es? Wenn ja, würde ich dich darum bitten diese frage als gelöst zu markieren. ;D

grüße,

Shadowmind