setlocal enableDelayedExpansion/disableDelayedExpansion-Wechsel
Hallo @ alle,
ich stehe vor dem Problem, dass ich für eine Operation "enableDelayedExpansion" brauche, dieses jedoch an einer anderen Stelle stört. Eine Variable, die ich aus einem File auslese beinhaltet nämlich Ausrufezeichen, welche samt nachstehendem Text einfach "rausgeschmissen" werden. Ein Wechsel zwischen enableDelayedExpasnion und DisableDelayedExpansion ist aber auch nicht so einfach möglich, da dabei entweder der Wert, wofür ich enable... brauche, aufgrund des endlocal nicht mehr verfügbar ist oder aber der Wert aus dem File beschnitten wird. Gibt es eine Möglichkeit, auf den Wert auch nach dem endlocal noch zuzugreifen?
Vielen Dank!
Daniel
ich stehe vor dem Problem, dass ich für eine Operation "enableDelayedExpansion" brauche, dieses jedoch an einer anderen Stelle stört. Eine Variable, die ich aus einem File auslese beinhaltet nämlich Ausrufezeichen, welche samt nachstehendem Text einfach "rausgeschmissen" werden. Ein Wechsel zwischen enableDelayedExpasnion und DisableDelayedExpansion ist aber auch nicht so einfach möglich, da dabei entweder der Wert, wofür ich enable... brauche, aufgrund des endlocal nicht mehr verfügbar ist oder aber der Wert aus dem File beschnitten wird. Gibt es eine Möglichkeit, auf den Wert auch nach dem endlocal noch zuzugreifen?
Vielen Dank!
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 47162
Url: https://administrator.de/forum/setlocal-enabledelayedexpansion-disabledelayedexpansion-wechsel-47162.html
Ausgedruckt am: 19.04.2025 um 05:04 Uhr
9 Kommentare
Neuester Kommentar
Moin BatzJunior,
Skizze:
[Ungetestete Skizze]
Gruß Biber
Skizze:
...
:auffuellen
if %wortlaenge%==0 set "zeichenfolge=%wert%" & goto :writeTemp
::Abschneiden der Gänsefuesschen
set zeichenfolge=%werte:~1,-1%
::Hier die Stelle, bei der ich enableDelayedExpansion brauche
::%wert% wird um die Länge des Strings minimiert
<b>Setlocal enableDelayedExpansion
set wertInnen=!wert:~0,-%wortlaenge%!
endlocal & set "wert=%wertInnen%"
</b>
::für 'zeichenfolge' allerdings schon nicht mehr, da innerhalb derer die besagten '!' vorkommen
::Zusammenfuegen von %zeichenfolge% und der übriggebliebenen Leerzeichen von %wert%
<b>REM Ggf explizites "Setlocal DisableDelayedExpansion</b>
set zeichenfolge=%zeichenfolge%%wert%
.....
[Ungetestete Skizze]
Gruß Biber
Moin BatzJunior,
Kennst Du jemanden in diesem Forum, der sich daran erinnern kann, dass mir mal Ideen ausgegangen wären?
Wenn die DelayedExpansion bei Dir unter Umständen Probleme macht ( z.B. wegen Ausrufungszeichen im String), dann meide sie doch ganz.
Lässt sich ja immer selbst nachbilden.
Wenn ich es richtig verstanden habe und die Soll-Länge auf jeden Fall kürzer oder gleich der momentanen Länge des Strings ist, dann reicht doch folgendes:
Demo: der %Wert% "whateverUwant" wird auf 8 Zeichen gekürzt.
Oder, falls jemand eine Batch-Funktion Left.bat braucht:
Demo:
HTH Biber
Noch irgend eine andere Idee?
Kennst Du jemanden in diesem Forum, der sich daran erinnern kann, dass mir mal Ideen ausgegangen wären?
Wenn die DelayedExpansion bei Dir unter Umständen Probleme macht ( z.B. wegen Ausrufungszeichen im String), dann meide sie doch ganz.
Lässt sich ja immer selbst nachbilden.
Wenn ich es richtig verstanden habe und die Soll-Länge auf jeden Fall kürzer oder gleich der momentanen Länge des Strings ist, dann reicht doch folgendes:
:: ----snipp CutItDemo.bat
@echo off & setlocal
Set /a wortlaenge=8
set "Wert=whateverUwant"
call:cutit wert "%%wert:~0,%wortlaenge%%%"
echo Wert[%wert%]
goto :eof
:cutit
Set "%1=%~2
goto :eof
Demo: der %Wert% "whateverUwant" wird auf 8 Zeichen gekürzt.
>f:\administrator\CutItDemo.bat
Wert[whatever]
Oder, falls jemand eine Batch-Funktion Left.bat braucht:
------- snipp Left.bat Parameter 1=String; Parameter 2= Soll-Länge
@echo off & setlocal
set "Wert=%1"
call:cutit wert "%%wert:~0,%2%%"
echo Left(%1, %2)=[%wert%]
goto :eof
:cutit
Set "%1=%~2
goto :eof
Demo:
>f:\administrator\Left.bat LangerTestText 8
Left(LangerTestText, 8)=[LangerTe]