Rückgabe String aus Subroutine geht nicht !
Hallo allerseits,
ich kämpfe damit einen String aus einer Subroutine an die aufrufende Routine zurückzugeben.
Kann mir jemand sagen was ich falsch mache ?
String aus der Subroutine soll über call-paramter %3 zurückgegeben werden.
Bin für jeden Hinweis dankbar.
Grüsse
Randolph
ich kämpfe damit einen String aus einer Subroutine an die aufrufende Routine zurückzugeben.
Kann mir jemand sagen was ich falsch mache ?
String aus der Subroutine soll über call-paramter %3 zurückgegeben werden.
@ECHO off
SETLOCAL
SET "searchstring1='CONTACT_FORMAT_GREETING_COMMON',"
SET "searchstring2=CONTACT_FORMAT_GREETING_MR',"
SET "linestart=START"
FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET "textline=%%i"
SETLOCAL enabledelayedexpansion
if "!textline!" neq "!textline:%searchstring1%=!" (
CALL :findString "!textline!" %searchstring1% %linestart%
echo !linestart!
REM Write the modified line
) ELSE (
REM Write the unmodified line
)
if "!textline!" neq "!textline:%searchstring2%=!" (
CALL :findString "!textline!" %searchstring2% %linestart%
echo !linestart!
REM Write the modified line
) ELSE (
REM Write the unmodified line
)
ENDLOCAL
)
GOTO :ENDE
:findString -- returns position of first occurrence of a string in another string
SETLOCAL ENABLEDELAYEDEXPANSION
set "mainstring=%1"
set "substring=%2"
Set "rest=!mainstring:*%substring%=!"
echo Rest: %rest%
Set "anfang=!mainstring:%rest%=!"
echo Anfang: %anfang%
ENDLOCAL &set "%3=!anfang!"
GOTO :EOF
:ENDE
ECHO Done^^!
Bin für jeden Hinweis dankbar.
Grüsse
Randolph
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217580
Url: https://administrator.de/forum/rueckgabe-string-aus-subroutine-geht-nicht-217580.html
Ausgedruckt am: 09.04.2025 um 19:04 Uhr
8 Kommentare
Neuester Kommentar
@ rubberman
Grüße
bastla
Ansonsten weiß ich nicht was das Ding eigentlich macht ...
Das soll die Position eines Substrings finden, damit danach ab dieser Position der Zeileninhalt ersetzt werden kann (siehe dazu auch den Ausgangsthread) ...Grüße
bastla
ENDLOCAL &set "%3=!anfang!"
cmd
Interpreter wertet von links nach rechts aus.Mit dem Kommando
ENDLOCAL
wird der Geltungsbereich von EnableDelayedExpansion
beendet.Das heisst, wenn der Interpreter
!anfang!
erreicht, gelten die erweiterten Syntaxregeln mit dem Ausrufezeichen gar nicht mehr.Aus
!anfang!
ist dann wieder eine 'ordinäre' Zeichenkette geworden.lg.
