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-Key: 572668

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: Shadowminder
Shadowminder May 17, 2020 at 10:04:03 (UTC)
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!
Member: Shadowminder
Shadowminder May 17, 2020 at 10:05:49 (UTC)
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...
Member: Penny.Cilin
Penny.Cilin May 17, 2020 at 11:04:27 (UTC)
Goto Top
Member: Panda01
Panda01 May 17, 2020 at 11:06:51 (UTC)
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
Member: Panda01
Panda01 May 17, 2020 at 11:10:40 (UTC)
Goto Top
Hey Penny.Cilin,

Nein ich habe es falsch geschrieben
Ich meine Batch Skripting.

Gruß
Panda01
Member: Penny.Cilin
Penny.Cilin May 17, 2020 at 11:24:57 (UTC)
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.
Member: Shadowminder
Shadowminder May 18, 2020 at 12:44:30 (UTC)
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