Can't get returnvalue from called batch file

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Message
Author
Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Can't get returnvalue from called batch file

#1 Post by Avanatus » 26 Jul 2016 19:01

Hi all,
i searched with google but cant find a solution for me that works.

I have 2 Batchfiles

1. test.cmd runs a for next loop - calls a function via:

Code: Select all

CALL RomanInDecimal.cmd SETCodeStart !Filename!


2. RomanInDecimal.cmd calculates the decimal number from a roman number and returns via

Code: Select all

SET DecimalNumberEND=!DecimalNumber!
ECHO ##### ##### DecimalNumberEND: !DecimalNumberEND! ##### #####
ENDLOCAL & SET RETURNVALUE=%DecimalNumberEND%
EXIT /b %DecimalNumberEND%


3. test.cmd tries to read the returnvalue via:

Code: Select all

SET DecimalNumber=DecimalNumberEND


...but this works not.

How can i set correct - read correct - the return value from RomanInDecimal.cmd

Thanks for help.

Avanatus

foxidrive
Expert
Posts: 6031
Joined: 10 Feb 2012 02:20

Re: Can't get returnvalue from called batch file

#2 Post by foxidrive » 26 Jul 2016 22:28

Show us your code please.
Your description isn't enough information because of the way loops and setlocal affect code.

The volunteers can read your code and just waste their time if the problem is within the script that they cant see.

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#3 Post by Avanatus » 27 Jul 2016 02:01

Hello foxidrive,
here is the code:

This is the caling batch file:

Code: Select all

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET Date=%date%
SET Time=%time:~0,5%

SET LocalisationFileName=Ava_Ger_Army_units.csv
SET FileExtension=.dds
SET CounterName=ger_first_army
SET FileNameStandart=Ger_Army_
SET StrLengthFileNameStandart=9
SET SourceFile=Vorlage\!CounterName!!FileExtension!
SET PreTextShort=GERARM
SET PreText=Armee
SET InfoFileName=Army_UNITS_LOCALISATION_001
SET DestinationDirectoryLocalisation=localisation\
SET SourceDirectoryCounter=gfx\mapitems\mapcounters\
SET DecimalNumber=0
SET Counter = 1

IF EXIST !DestinationDirectoryLocalisation!!LocalisationFileName! REN !DestinationDirectoryLocalisation!Backup_!LocalisationFileName!

CALL :SETInfoCreateDate
CALL :SETInfoHeader

FOR %%i IN (!SourceDirectoryCounter!*!FileExtension!) DO (
   SET Filename=%%~ni
   CALL :StrLength !Filename!
   ECHO ##### Filename: !Filename! #####
   CALL _04_CODERomanInDezimal.cmd SETCodeStart !Filename!
   
   SET DecimalNumber=!RETURNVALUE!

   ECHO ##### DecimalNumber: !DecimalNumber! #####
   PAUSE
   CALL :SETStrLengthRomanNumber
   CALL :SETLocalisationText
)

::   CALL _04_CODERomanInDezimal.cmd SETCodeStart !Filename!
::  FOR /F "tokens=1" %%i IN ('_04_CODERomanInDezimal.cmd') DO SET DecimalNumberEND=%%i
::   SET RETURNVALUE=!RETURNVALUE!
::  @FOR /F "tokens=*" %%i IN ('_04_CODERomanInDezimal.cmd') DO set DecimalNumberEND=%%i
::  FOR /F "tokens=*" %%i IN ('_04_CODERomanInDezimal.cmd') DO SET DecimalNumberEND=%%i
::    FOR /f "delims=" %%I in ('_04_CODERomanInDezimal.cmd "%%~x"') DO ( set "DecimalNumberEND=%%I" )



CALL :SETInfoCountEvents
GOTO :EOF

:SETInfoCreateDate
::########## First row file localisation ##########
   ECHO ##### Autogenerated by Ava !Date! !Time! !InfoFileName! >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ##############################################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETInfoCountEvents
::########## Last row file localisation ##########
   SET /a Counter=!Counter!-1
   ECHO ##### Autogenerated by Ava !Counter! Army EVENTS erstellt >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ##############################################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETInfoHeader
   ECHO # MODEL_TAG;ENGLISH;FRENCH;GERMAN;;SPANISH;;;;;;;;;x >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;x >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO # Avas Units;;;;;;;;;;;;;;x >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;x >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ;;;;;;;;;;;;;;x >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO Army groups;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETLocalisationText
   ECHO !Filename!;!DecimalNumber!.!PreText!;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO !Filename!_short;!TextShort!;; >> !DestinationDirectoryLocalisation!!LocalisationFilename!
GOTO :EOF
   
:StrLength
   SET StrLength=0
   SET tmpString=%*
   SET Length=0
   :StrLengthLoop
   IF not "!tmpString:~%StrLength%,1!"=="" (
     SET /a StrLength += 1
     GOTO StrLengthLoop
   )
GOTO :EOF

:SETStrLengthRomanNumber
   SET /a SETStrLengthRomanNumber=!StrLength!-!StrLengthFilenameStandart!
   
   IF !SETStrLengthRomanNumber! EQU 1 GOTO :One
   IF !SETStrLengthRomanNumber! EQU 2 GOTO :Two
   IF !SETStrLengthRomanNumber! EQU 3 GOTO :Three
   IF !SETStrLengthRomanNumber! EQU 4 GOTO :Four
   IF !SETStrLengthRomanNumber! EQU 5 GOTO :Five
   IF !SETStrLengthRomanNumber! EQU 6 GOTO :Six
   IF !SETStrLengthRomanNumber! EQU 7 GOTO :Seven
   IF !SETStrLengthRomanNumber! EQU 8 GOTO :Eight
   IF !SETStrLengthRomanNumber! EQU 9 GOTO :Nine
   IF !SETStrLengthRomanNumber! EQU 10 GOTO :Ten
   IF !SETStrLengthRomanNumber! EQU 11 GOTO :Eleven
   IF !SETStrLengthRomanNumber! GEQ 12 GOTO :Undifined   

GOTO :EOF

:One
   SET RightString=!Filename:~-1!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Two
   SET RightString=!Filename:~-2!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Three
   SET RightString=!Filename:~-3!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Four
   SET RightString=!Filename:~-4!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Five
   SET RightString=!Filename:~-5!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Six
   SET RightString=!Filename:~-6!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Seven
   SET RightString=!Filename:~-7!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Eight
   SET RightString=!Filename:~-8!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Nine
   SET RightString=!Filename:~-9!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Ten
   SET RightString=!Filename:~-10!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Eleven
   SET RightString=!Filename:~-11!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Undifined
   SET TextShort=!PreTextShort!!RightString!
   GOTO :EOF

ENDLOCAL


And this is the called batch file:

Code: Select all

:: Calculate Roman To decimal (1-999) - 072016
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

CALL :%*
GOTO :EOF


:SETCodeStart %1
   SET FileNameStandart=Ger_Army
   SET StrLengthFileNameStandart=9
   SET SETStrLengthRomanNumber=0
   SET DecimalNumber=0
   SET Counter=0
   SET Filename=%1


   CALL :StrLength !Filename!
   CALL :SETStrLengthRomanNumber !StrLength!
   CALL :SETCodeEnd
GOTO :EOF

:StrLength
   SET StrLength=0
   SET tmpString=%*
   SET Length=0
   :StrLengthLoop
   IF not "!tmpString:~%StrLength%,1!"=="" (
     SET /a StrLength += 1
     GOTO StrLengthLoop
   )
GOTO :EOF

:SETStrLengthRomanNumber
   SET /a SETStrLengthRomanNumber=!StrLength!-!StrLengthFileNameStandart!
::ECHO ##### ##### Filename: !Filename! ##### #####
::ECHO ##### ##### SETStrLengthRomanNumber: !SETStrLengthRomanNumber! ##### #####   
::PAUSE
   IF !SETStrLengthRomanNumber! EQU 1 GOTO :One
   IF !SETStrLengthRomanNumber! EQU 2 GOTO :Two
   IF !SETStrLengthRomanNumber! EQU 3 GOTO :Three
   IF !SETStrLengthRomanNumber! EQU 4 GOTO :Four
   IF !SETStrLengthRomanNumber! EQU 5 GOTO :Five
   IF !SETStrLengthRomanNumber! EQU 6 GOTO :Six
   IF !SETStrLengthRomanNumber! EQU 7 GOTO :Seven
   IF !SETStrLengthRomanNumber! EQU 8 GOTO :Eight
   IF !SETStrLengthRomanNumber! EQU 9 GOTO :Nine
   IF !SETStrLengthRomanNumber! EQU 10 GOTO :Ten
   IF !SETStrLengthRomanNumber! EQU 11 GOTO :Eleven
   IF !SETStrLengthRomanNumber! GEQ 12 GOTO :Undefined
GOTO :EOF

::Array
::##### Just for copy - no function #####
::   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
::   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
::
::   GOTO :EOF

:One
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   
::ECHO ##### ##### RomanNumber: !RomanNumber! ##### #####   
   
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%
   
::ECHO ##### ##### DecimalNumber1: !DecimalNumber1! ##### #####
   
   SET "RomanNumber=!RomanNumber1!"   
   SET DecimalNumber=!DecimalNumber1!

   SET /a Counter = !Counter! + 1
   
::ECHO ##### ##### RomanNumber1: !RomanNumber1! ##### #####
::PAUSE   
GOTO :EOF

:Two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!"   
   SET DecimalNumber=!DecimalNumber1!

   SET /a Counter = !Counter! + 1
GOTO :EOF

:Three
::Calculate from left
::front one
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
::ECHO ########## Value DecimalNumber2-1(3) = !RomanNumber2! ##########
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!"   
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )

::ECHO ########## Value RomanNumber(3) = !RomanNumber! ##########
::ECHO ########## Value DecimalNumber1(3) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2-2(3) = !DecimalNumber2! ##########
::ECHO ########## Value RomanNumberA(3) = !RomanNumberA! ##########
::ECHO ########## Value DecimalNumber(3) = !DecimalNumber! ##########
::PAUSE
      
   SET /a Counter = !Counter! + 1
   GOTO :EOF

:Four
::calculate from left
::front two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map1=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!"   
   SET /a DecimalNumber=(!DecimalNumber1!+!DecimalNumber2!)
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Five
::calculate from left
::front one
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map3=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map3:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
   
::ECHO ########## Value DecimalNumber1(5) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(5) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(5) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber(5) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF


:Six
::Calculate from left
::front two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
::ECHO ########## Value RomanNumber(6) = !RomanNumber! ##########
::ECHO ########## Value DecimalNumber1(6) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(6) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(6) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber(6) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Seven
::Calculate from left
::front one
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(7) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(7) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(7) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(7) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(7) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(7) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Eight
::Calculate from left
::front two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~15,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Nine
::Calculate from left
::front one
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~16,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(9) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(9) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(9) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(9) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(9) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(9) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF
   
:Ten
::Calculate from left
::front two
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~15,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~17,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%   
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Eleven
::Calculate from left
::front one
::middle two
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~16,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~18,2!
   SET RomanNumber6=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber6=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!!RomanNumber6!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!+!DecimalNumber6!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(11) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(11) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(11) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(11) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(11) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(11) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF
   
:Undefined
::Not created calculation

::   SET RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!
   SET DecimalNumber=undefined
   SET /a Counter = !Counter! + 1
GOTO :EOF

:SETCodeEnd
SET DecimalNumberEND=!DecimalNumber!
::SET %1=!DecimalNumber!
ECHO ##### ##### DecimalNumberEND: !DecimalNumberEND! ##### #####
::ECHO !DecimalNumberEND!
::!DecimalNumberEND! >> DecimalNumberEND.tmp

GOTO :EOF
ENDLOCAL & SET RETURNVALUE=%DecimalNumberEND%
::ENDLOCAL & SET %2=!DecimalNumber! & GOTO :eof
::ENDLOCAL
::  set "%~2=%DecimalNumberEND%"
EXIT /b !RETURNVALUE!


The caller batch file creates a text file and calls for a decimalnumber.
The called batchfile converts the roman number into a decimal number and returns the decimal value.
The caller batchfile creates a textstring with the decimal number.

All works fine - the called batchfile calculate as expected - but the caller batchfile did not get the decimal number.

I tried a few options but none did work for me :-)

Thanks for help
Avanatus

douglas.swehla
Posts: 75
Joined: 01 Jun 2016 09:25

Re: Can't get returnvalue from called batch file

#4 Post by douglas.swehla » 27 Jul 2016 02:39

As foxidrive pointed out, we're better off seeing your full code. I'm going to take stab at it anyway, based on what you've given so far. There may be other issues, but these stand out.

Avanatus wrote:

Code: Select all

SET DecimalNumberEND=!DecimalNumber!
ECHO ##### ##### DecimalNumberEND: !DecimalNumberEND! ##### #####
ENDLOCAL & SET RETURNVALUE=%DecimalNumberEND%
EXIT /b %DecimalNumberEND%


3. test.cmd tries to read the returnvalue via:

Code: Select all

SET DecimalNumber=DecimalNumberEND



In step 3, you're trying to retrieve the value from DecimalNumberEND when you stored it in RETURNVALUE. Also, you're missing the percent signs on the right side of the assignment, so you're just storing the variable name instead of its value.

Code: Select all

:: This doesn't work because you're just storing the string "DecimalNumberEND".
SET DecimalNumber=DecimalNumberEND

:: This doesn't work either, because DecimalNumberEND doesn't exist anymore.
SET DecimalNumber=%DecimalNumberEND%

:: This should work, because you set RETURNVALUE after ENDLOCAL.
SET DecimalNumber=%RETURNVALUE%

:: You don't actually need another SET command to use the variable.
ECHO %RETURNVALUE%


In RomanInDecimal.cmd, you're trying to pass the DecimalNumberEND value back as an error code, which is fine, but again, you're using the wrong variable. Change EXIT /b %DecimalNumberEND% to EXIT /b %RETURNVALUE%, and you can do this in test.cmd: SET DecimalNumber=%errorlevel%. You'll need to do that shortly after the CALL, before running any commands that set ERRORLEVEL. The ECHO command doesn't set ERRORLEVEL, so it's okay to use.

The DecimalNumberEND variable isn't needed, based on what you've shown. Using ENDLOCAL & SET RETURNVALUE=%DecimalNumber% will work just as well.

The endlocal & set "return=%whatever%" trick works because %whatever% gets expanded to its value before the ENDLOCAL command is run, but the SET command runs afterward, so that the variable (return, in this case) gets set in the environment that existed before the SETLOCAL command. We can use it in the rest of the current batch (e.g., in the EXIT command) and in the calling batch.

If you know what variable name you'll want to use in the calling batch, you can just go ahead and use that in the called batch instead of the intermediate RETURNVALUE. That's a matter of preference, not right or wrong. If you want to do that, then the last couple lines in RomanInDecimal.cmd would be ENDLOCAL & SET DecimalNumber=%DecimalNumber% and EXIT /B %DecimalNumber%

Put it all together, and we get this:

Code: Select all

:: test.cmd
CALL RomanInDecimal.cmd SETCodeStart !Filename!
ECHO DecimalNumber: %DecimalNumber%
ECHO errorlevel: %errorlevel%
SET DecNumFromErr=%errorlevel%


Code: Select all

:: RomanInDecimal.cmd
REM Don't need this: SET DecimalNumberEND=!DecimalNumber!
ECHO ##### ##### DecimalNumber: %DecimalNumber% ##### #####
ENDLOCAL & SET DecimalNumber=%DecimalNumber%
EXIT /B %DecimalNumber%

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#5 Post by Avanatus » 27 Jul 2016 06:04

Hello douglas.
thanks for your explanations and examples :-)

I changed the code to your suggestions.

This is the result (Echo):

Code: Select all

 
##### Filename in test.cmd before CALL: ger_army_C #####
##### ##### DecimalNumber In RomanInDecimal.cmd: 100 ##### #####
##### DecimalNumber in test.cmd after CALL: 0 #####
##### errorlevel in test.cmd after CALL: 0 #####


So it looks for me - the variable %DecimalNumber% does not contain my value from the calculation (100)...

I tested it in the meantime with:

Code: Select all

:: RomanInDecimal.cmd
   :SETCodeEnd
   SET DecimalNumberEND=!DecimalNumber!
   ECHO ##### ##### DecimalNumber: %DecimalNumber% ##### #####
   ECHO !DecimalNumberEND!> decimaltext.txt
GOTO :EOF
ENDLOCAL


and

Code: Select all

:: Test.cmd
   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
   FOR /f "delims=" %%x IN (decimaltext.txt) DO SET RETURNVALUE=%%x
   DEL decimaltext.txt
  SET DecimalNumber=!RETURNVALUE!


That works for me - even i found it "uncomfortable"

Any other ideas?

Thanks
Avanatus

penpen
Expert
Posts: 2009
Joined: 23 Jun 2013 06:15
Location: Germany

Re: Can't get returnvalue from called batch file

#6 Post by penpen » 27 Jul 2016 06:44

Avanatus wrote:That works for me - even i found it "uncomfortable"

Any other ideas?
I bet you have missed the main point of douglas.swehla, so you should read his answer again.


penpen

douglas.swehla
Posts: 75
Joined: 01 Jun 2016 09:25

Re: Can't get returnvalue from called batch file

#7 Post by douglas.swehla » 27 Jul 2016 08:29

From the end of RomanInDecimal.cmd:

Avanatus wrote:

Code: Select all

:SETCodeEnd
SET DecimalNumberEND=!DecimalNumber!
::SET %1=!DecimalNumber!
ECHO ##### ##### DecimalNumberEND: !DecimalNumberEND! ##### #####
::ECHO !DecimalNumberEND!
::!DecimalNumberEND! >> DecimalNumberEND.tmp

GOTO :EOF
ENDLOCAL & SET RETURNVALUE=%DecimalNumberEND%
::ENDLOCAL & SET %2=!DecimalNumber! & GOTO :eof
::ENDLOCAL
::  set "%~2=%DecimalNumberEND%"
EXIT /b !RETURNVALUE!



You've got an extra GOTO :EOF right before the ENDLOCAL command. Flow control skips from there to the end to the end of the batch, so the RETURNVALUE variable never gets set.

As noted before, the DecimalNumberEND variable is overkill. I've removed it in my suggestion below. You can put it back without breaking anything, but it just slows down your code.

You're using delayed expansion syntax after ENDLOCAL, which returns you to normal expansion mode. This means that in the EXIT /B command, you're passing the string "!RETURNVALUE!" instead of the number 100. The ERRORLEVEL returned to the calling batch will be whatever it was set to by the last command to set it. Since that command was presumably successful, it will return 0.

Try replacing the snippet above with this:

Code: Select all

:SETCodeEnd
ECHO ##### ##### DecimalNumber: %DecimalNumber% ##### #####
ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
EXIT /B %RETURNVALUE%


On a more general note, I expect that most of those :length subroutines (:one, :two, :three, et al.) can be consolidated into something more algorithmic, but I haven't got time to wade into that right now. Someone else might want to take a shot.

I'm going to be pretty busy all day today, so if this doesn't solve it for you, I won't be able to help until tonight. For now, I leave you in the capable hands of foxidrive, penpen, and the rest of the gang.

-Douglas

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#8 Post by Avanatus » 27 Jul 2016 10:37

Hi all,
i changed the code to :

Code: Select all

 ::RomanToDecimal.cmd
:SETCodeEnd
   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
   ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
   EXIT /B %RETURNVALUE%


and

Code: Select all

::Testcmd
   ECHO ##### Filename in test.cmd before CALL: !Filename! #####
   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!

   ECHO ##### DecimalNumber in test.cmd after CALL: %DecimalNumber% #####
   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
   SET DecNumFromErr=%errorlevel%
   PAUSE


The output is:

Code: Select all

##### Filename in test.cmd before CALL: ger_army_C #####
##### ##### DecimalNumber In RomanToDecimal.cmd: 100 ##### #####
##### DecimalNumber in test.cmd after CALL: 0 #####
##### errorlevel in test.cmd after CALL: 0 #####


Nothing changed it seems....

Thanks for help

Avanatus

douglas.swehla
Posts: 75
Joined: 01 Jun 2016 09:25

Re: Can't get returnvalue from called batch file

#9 Post by douglas.swehla » 27 Jul 2016 11:07

Avanatus wrote:

Code: Select all

 
 ::RomanToDecimal.cmd
ENDLOCAL & SET RETURNVALUE=%DecimalNumber%

and

Code: Select all

::Testcmd
ECHO ##### DecimalNumber in test.cmd after CALL: %DecimalNumber% #####



You're mixing up variable names again. You're returning RETURNVALUE, but testing for DecimalNumber. You have to pick one and be consistent. Try this:

Code: Select all

 ::RomanToDecimal.cmd
:SETCodeEnd
   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
   ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
   EXIT /B %RETURNVALUE%


and

Code: Select all

::Testcmd
   ECHO ##### Filename in test.cmd before CALL: !Filename! #####
   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!

   ECHO ##### RETURNVALUE in test.cmd after CALL: %RETURNVALUE% #####
   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
   SET DecNumFromErr=%errorlevel%
   PAUSE

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#10 Post by Avanatus » 27 Jul 2016 13:56

First of all - thanks for your patience :-)

Next Test....

I changed Test.cmd to

Code: Select all

ECHO ##### Filename in test.cmd before CALL: !Filename! #####
   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
   
   ECHO ##### RETURNVALUE in test.cmd after CALL: %RETURNVALUE% #####
   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
   SET DecNumFromErr=%errorlevel%
   PAUSE


and RomanInDecimal.cmd to:

Code: Select all

:SETCodeEnd
   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
   ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
   EXIT /B %RETURNVALUE%


the Output is:

##### Filename in test.cmd before CALL: ger_army_C #####
##### ##### DecimalNumber In RomanToDecimal.cmd: 100 ##### #####
##### RETURNVALUE in test.cmd after CALL: #####
##### errorlevel in test.cmd after CALL: 0 #####


It seems the variable %RETURNVALUE% is not set....
I don't have a clue why....

Avanatus

douglas.swehla
Posts: 75
Joined: 01 Jun 2016 09:25

Re: Can't get returnvalue from called batch file

#11 Post by douglas.swehla » 27 Jul 2016 14:26

Are these smaller test files, or have you been updating the full originals? In either case, please go ahead and post the full file contents again, so we can be sure we're not missing any important context.

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#12 Post by Avanatus » 27 Jul 2016 14:34

Hi Douglas,

i just replaced in the test.cmd and the RomanInDecimal.cmd the code snippet from the forum.

But here the whole code again:

Test.cmd:

Code: Select all

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET Date=%date%
SET Time=%time:~0,5%

SET LocalisationFileName=Ava_Ger_Army_units.csv
SET FileExtension=.dds
SET CounterName=ger_first_army
SET FileNameStandart=Ger_Army_
SET StrLengthFileNameStandart=9
SET SourceFile=Vorlage\!CounterName!!FileExtension!
SET PreTextShort=GERARM
SET PreText=Armee
SET InfoFileName=Army_UNITS_LOCALISATION_001
SET DestinationDirectoryLocalisation=localisation\
SET SourceDirectoryCounter=gfx\mapitems\mapcounters\
SET DecimalNumber=0
SET Counter = 1

IF EXIST (!DestinationDirectoryLocalisation!Backup_!LocalisationFileName!) DO (
   COPY !DestinationDirectoryLocalisation!Backup_!LocalisationFileName! !DestinationDirectoryLocalisation!Backup\Backup_!LocalisationFileName!
   DEL !DestinationDirectoryLocalisation!Backup_!LocalisationFileName!
)
IF EXIST (!DestinationDirectoryLocalisation!!LocalisationFileName!) DO (
   CD !DestinationDirectoryLocalisation!
   REN !LocalisationFileName! Backup_!LocalisationFileName!
   CD..
)

CALL :SETinfoCreateDate
CALL :SETinfoHeader

FOR %%i IN (!SourceDirectoryCounter!*!FileExtension!) DO (
   SET Filename=%%~ni
   CALL :StrLength !Filename!
   ECHO ##### Filename in test.cmd before CALL: !Filename! #####
   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
   
   ECHO ##### RETURNVALUE in test.cmd after CALL: %RETURNVALUE% #####
   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
   SET DecNumFromErr=%errorlevel%
   PAUSE

   CALL :SETStrLengthRomanNumber
   CALL :SETLocalisationText
)

CALL :SETinfoCountEvents
GOTO :EOF

::  Working - reads created textfile with number in it
::   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
::   FOR /f "delims=" %%x IN (decimaltext.txt) DO SET RETURNVALUE=%%x
::   DEL decimaltext.txt
::  SET DecimalNumber=!RETURNVALUE!

::  Testing from Forum 1
::   ECHO ##### Filename in test.cmd before CALL: !Filename! #####
::   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
::
::   ECHO ##### DecimalNumber in test.cmd after CALL: %DecimalNumber% #####
::   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
::   SET DecNumFromErr=%errorlevel%
::   PAUSE

::  Testing from Forum 2
::   ECHO ##### Filename in test.cmd before CALL: !Filename! #####
::   CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!
::
::   ECHO ##### RETURNVALUE in test.cmd after CALL: %RETURNVALUE% #####
::   ECHO ##### errorlevel in test.cmd after CALL: %errorlevel% #####
::   SET DecNumFromErr=%errorlevel%
::   PAUSE
   
:SETinfoCreateDate
::########## First row file localisation ##########
   ECHO ##### Autogenerated by Ava !Date! !Time! !InfoFileName! >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ##############################################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETinfoCountEvents
::########## Last row file localisation ##########
   ECHO ##### Autogenerated by Ava !Counter! Army Names erstellt >> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ##############################################################;;;;;;;;;;;;;; >> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETinfoHeader
   ECHO # MODEL_TAG;ENGLISH;FRENCH;GERMAN;;SPANISH;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO # Avas Units;;;;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ;;;;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO Army groups;;;;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO ######################################;;;;;;;;;;;;;;>> !DestinationDirectoryLocalisation!!LocalisationFileName!
GOTO :EOF

:SETLocalisationText
   ECHO !Filename!;!DecimalNumber!.!PreText!;!DecimalNumber!.!PreText!;!DecimalNumber!.!PreText!;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO !Filename!_short;!TextShort!;!TextShort!;!TextShort!;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFilename!
   SET /a Counter+=1
GOTO :EOF
   
:StrLength
   SET StrLength=0
   SET tmpString=%*
   SET Length=0
   :StrLengthLoop
   IF not "!tmpString:~%StrLength%,1!"=="" (
     SET /a StrLength += 1
     GOTO StrLengthLoop
   )
GOTO :EOF

:SETStrLengthRomanNumber
   SET /a SETStrLengthRomanNumber=!StrLength!-!StrLengthFilenameStandart!
   
   IF !SETStrLengthRomanNumber! EQU 1 GOTO :One
   IF !SETStrLengthRomanNumber! EQU 2 GOTO :Two
   IF !SETStrLengthRomanNumber! EQU 3 GOTO :Three
   IF !SETStrLengthRomanNumber! EQU 4 GOTO :Four
   IF !SETStrLengthRomanNumber! EQU 5 GOTO :Five
   IF !SETStrLengthRomanNumber! EQU 6 GOTO :Six
   IF !SETStrLengthRomanNumber! EQU 7 GOTO :Seven
   IF !SETStrLengthRomanNumber! EQU 8 GOTO :Eight
   IF !SETStrLengthRomanNumber! EQU 9 GOTO :Nine
   IF !SETStrLengthRomanNumber! EQU 10 GOTO :Ten
   IF !SETStrLengthRomanNumber! EQU 11 GOTO :Eleven
   IF !SETStrLengthRomanNumber! GEQ 12 GOTO :Undifined   

GOTO :EOF

:One
   SET RightString=!Filename:~-1!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Two
   SET RightString=!Filename:~-2!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Three
   SET RightString=!Filename:~-3!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Four
   SET RightString=!Filename:~-4!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Five
   SET RightString=!Filename:~-5!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Six
   SET RightString=!Filename:~-6!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Seven
   SET RightString=!Filename:~-7!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Eight
   SET RightString=!Filename:~-8!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Nine
   SET RightString=!Filename:~-9!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Ten
   SET RightString=!Filename:~-10!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Eleven
   SET RightString=!Filename:~-11!
   SET TextShort=!PreTextShort!!RightString!
GOTO :EOF

:Undifined
   SET TextShort=!PreTextShort!!RightString!
   GOTO :EOF

ENDLOCAL


RomanInDecimal.cmd

Code: Select all

:: Calculate Roman To decimal (1-999) - 072016
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

CALL :%*
GOTO :EOF


:SETCodeStart %1
   SET FileNameStandart=Ger_Army
   SET StrLengthFileNameStandart=9
   SET SETStrLengthRomanNumber=0
   SET DecimalNumber=0
   SET Counter=0
   SET Filename=%1


   CALL :StrLength !Filename!
   CALL :SETStrLengthRomanNumber !StrLength!
   CALL :SETCodeEnd
GOTO :EOF

:StrLength
   SET StrLength=0
   SET tmpString=%*
   SET Length=0
   :StrLengthLoop
   IF not "!tmpString:~%StrLength%,1!"=="" (
     SET /a StrLength += 1
     GOTO StrLengthLoop
   )
GOTO :EOF

:SETStrLengthRomanNumber
   SET /a SETStrLengthRomanNumber=!StrLength!-!StrLengthFileNameStandart!
::ECHO ##### ##### Filename: !Filename! ##### #####
::ECHO ##### ##### SETStrLengthRomanNumber: !SETStrLengthRomanNumber! ##### #####   
::PAUSE
   IF !SETStrLengthRomanNumber! EQU 1 GOTO :One
   IF !SETStrLengthRomanNumber! EQU 2 GOTO :Two
   IF !SETStrLengthRomanNumber! EQU 3 GOTO :Three
   IF !SETStrLengthRomanNumber! EQU 4 GOTO :Four
   IF !SETStrLengthRomanNumber! EQU 5 GOTO :Five
   IF !SETStrLengthRomanNumber! EQU 6 GOTO :Six
   IF !SETStrLengthRomanNumber! EQU 7 GOTO :Seven
   IF !SETStrLengthRomanNumber! EQU 8 GOTO :Eight
   IF !SETStrLengthRomanNumber! EQU 9 GOTO :Nine
   IF !SETStrLengthRomanNumber! EQU 10 GOTO :Ten
   IF !SETStrLengthRomanNumber! EQU 11 GOTO :Eleven
   IF !SETStrLengthRomanNumber! GEQ 12 GOTO :Undefined
GOTO :EOF

::Array
::##### Just FOR copy - no function #####
::   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
::   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
::
::   GOTO :EOF

:One
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   
::ECHO ##### ##### RomanNumber: !RomanNumber! ##### #####   
   
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%
   
::ECHO ##### ##### DecimalNumber1: !DecimalNumber1! ##### #####
   
   SET "RomanNumber=!RomanNumber1!"   
   SET DecimalNumber=!DecimalNumber1!

   SET /a Counter = !Counter! + 1
   
::ECHO ##### ##### RomanNumber1: !RomanNumber1! ##### #####
::PAUSE   
GOTO :EOF

:Two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!"   
   SET DecimalNumber=!DecimalNumber1!

   SET /a Counter = !Counter! + 1
GOTO :EOF

:Three
::Calculate from left
::front one
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
::ECHO ########## Value DecimalNumber2-1(3) = !RomanNumber2! ##########
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!"   
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )

::ECHO ########## Value RomanNumber(3) = !RomanNumber! ##########
::ECHO ########## Value DecimalNumber1(3) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2-2(3) = !DecimalNumber2! ##########
::ECHO ########## Value RomanNumberA(3) = !RomanNumberA! ##########
::ECHO ########## Value DecimalNumber(3) = !DecimalNumber! ##########
::PAUSE
      
   SET /a Counter = !Counter! + 1
   GOTO :EOF

:Four
::calculate from left
::front two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map1=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!"   
   SET /a DecimalNumber=(!DecimalNumber1!+!DecimalNumber2!)
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Five
::calculate from left
::front one
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map3=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map3:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
   
::ECHO ########## Value DecimalNumber1(5) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(5) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(5) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber(5) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF


:Six
::Calculate from left
::front two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
::ECHO ########## Value RomanNumber(6) = !RomanNumber! ##########
::ECHO ########## Value DecimalNumber1(6) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(6) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(6) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber(6) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Seven
::Calculate from left
::front one
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(7) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(7) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(7) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(7) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(7) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(7) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Eight
::Calculate from left
::front two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~15,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Nine
::Calculate from left
::front one
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~16,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(9) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(9) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(9) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(9) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(9) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(9) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF
   
:Ten
::Calculate from left
::front two
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,2!
   SET RomanNumber1=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~11,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~13,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~15,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~17,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%   
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!
   
   SET RomanNumberA=!FileName:~10,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET RomanNumberB=!FileName:~12,2!
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   SET /a Counter = !Counter! + 1
GOTO :EOF

:Eleven
::Calculate from left
::front one
::middle two
::middle two
::middle two
::middle two
::back two
   SET RomanNumber=!FileName:~9,1!
   SET RomanNumber1=!RomanNumber!
   SET map1=C;100;I;1;L;50;V;5;X;10;D;500;M;1000
   CALL SET RomanNumber=%%map1:*%RomanNumber%;=%%
   SET DecimalNumber1=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~10,2!
   SET RomanNumber2=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber2=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~12,2!
   SET RomanNumber3=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber3=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~14,2!
   SET RomanNumber4=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber4=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~16,2!
   SET RomanNumber5=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber5=%RomanNumber:;=&rem.%

   SET RomanNumber=!FileName:~18,2!
   SET RomanNumber6=!RomanNumber!
   SET map2=CC;200;CD;400;CI;101;CL;150;CM;900;CV;105;CX;110;DC;600;DI;501;DL;550;DV;505;DX;510;II;2;IV;4;IX;9;LI;51;LV;55;LX;60;VI;6;XC;90;XI;11;XL;40;XV;15;XX;20
   CALL SET RomanNumber=%%map2:*%RomanNumber%;=%%
   SET DecimalNumber6=%RomanNumber:;=&rem.%
   
   SET "RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!!RomanNumber5!!RomanNumber6!"
   SET /a DecimalNumber=!DecimalNumber1!+!DecimalNumber2!+!DecimalNumber3!+!DecimalNumber4!+!DecimalNumber5!+!DecimalNumber6!
   
   SET RomanNumberA=!FileName:~9,2!
   IF !RomanNumberA! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberA! EQU CD (
      SET /a DecimalNumber=!DecimalNumber! - 200
      )   
   SET RomanNumberB=!FileName:~11,2!
   IF !RomanNumberB! EQU XC (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   IF !RomanNumberB! EQU XL (
      SET /a DecimalNumber=!DecimalNumber! - 20
      )
   
::ECHO ########## Value DecimalNumber1(11) = !DecimalNumber1! ##########
::ECHO ########## Value DecimalNumber2(11) = !DecimalNumber2! ##########
::ECHO ########## Value DecimalNumber3(11) = !DecimalNumber3! ##########
::ECHO ########## Value DecimalNumber4(11) = !DecimalNumber4! ##########
::ECHO ########## Value RomanNumber5(11) = !RomanNumber5! ##########
::ECHO ########## Value DecimalNumber(11) = !DecimalNumber! ##########
::PAUSE
   SET /a Counter = !Counter! + 1
GOTO :EOF
   
:Undefined
::Not created calculation

::   SET RomanNumber=!RomanNumber1!!RomanNumber2!!RomanNumber3!!RomanNumber4!
   SET DecimalNumber=undefined
   SET /a Counter = !Counter! + 1
GOTO :EOF

::   :SETCodeEnd
::   Working Code
::   SET DecimalNumberEND=!DecimalNumber!
::   ECHO ##### ##### DecimalNumber: %DecimalNumber% ##### #####
::   ECHO !DecimalNumberEND!> decimaltext.txt
::GOTO :EOF
::ENDLOCAL

::  Testing from Forum - RomanInDecimal.cmd 1
::  REM Don't need this: SET DecimalNumberEND=!DecimalNumber!
::   ECHO ##### ##### DecimalNumber In RomanInDecimal.cmd: %DecimalNumber% ##### #####
::   ENDLOCAL & SET DecimalNumber=%DecimalNumber%
::   EXIT /B %DecimalNumber%

::   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
::   ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
::   EXIT /B %RETURNVALUE%

::  Testing from Forum - RomanInDecimal.cmd 2   
:SETCodeEnd
   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
   ENDLOCAL & SET RETURNVALUE=%DecimalNumber%
   EXIT /B %RETURNVALUE%


This are the 2 cmd's after the last code snippet from the forum.
Avanatus

douglas.swehla
Posts: 75
Joined: 01 Jun 2016 09:25

Re: Can't get returnvalue from called batch file

#13 Post by douglas.swehla » 27 Jul 2016 15:37

The issue is that, due to multiple nested CALLs, you've got three ENDLOCAL barriers to cross, but RETURNVALUE is only making it across one of them. I've been assuming that the :SETCodeEnd segment was the last thing in the called file, when in fact it's the innermost layer of four.

We actually shouldn't need the :SETCodeEnd subroutine at all, since it's just doing things that can be done more easily in :SETCodeStart . I've commented out the call to it, and made some other changes to :SETCodeStart and the very beginning of the batch. Swap these lines into the beginning of _04_CODERomaninDezimal.cmd, and see how it goes. If it works, I'll explain what's going on.

Code: Select all

:: Calculate Roman To decimal (1-999) - 072016
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

CALL :%*
ENDLOCAL & (%RETURN_CMD%)
EXIT /B %EXIT_CODE%


:SETCodeStart %1
   SET FileNameStandart=Ger_Army
   SET StrLengthFileNameStandart=9
   SET SETStrLengthRomanNumber=0
   SET DecimalNumber=0
   SET Counter=0
   SET Filename=%1


   CALL :StrLength !Filename!
   CALL :SETStrLengthRomanNumber !StrLength!
::   CALL :SETCodeEnd
   SET "RETURN_CMD=SET RETURNVALUE=%DecimalNumber%"
   SET "EXIT_CODE=%DecimalNumber%"
GOTO :EOF


If they don't contain sensitive information, a copy of one the .dds files would be useful for testing.

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#14 Post by Avanatus » 27 Jul 2016 16:33

Hi douglas,

i changed the code to the snippet you created and inserted an ECHO to see that the calculation works. Here is the code i inserted:

Code: Select all

:: Calculate Roman To decimal (1-999) - 072016
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

CALL :%*
ENDLOCAL & (%RETURN_CMD%)
EXIT /B %EXIT_CODE%


:SETCodeStart %1
   SET FileNameStandart=Ger_Army
   SET StrLengthFileNameStandart=9
   SET SETStrLengthRomanNumber=0
   SET DecimalNumber=0
   SET Counter=0
   SET Filename=%1


   CALL :StrLength !Filename!
   CALL :SETStrLengthRomanNumber !StrLength!
::   CALL :SETCodeEnd
   ECHO ##### ##### DecimalNumber In RomanToDecimal.cmd: %DecimalNumber% ##### #####
   SET "RETURN_CMD=SET RETURNVALUE=%DecimalNumber%"
   SET "EXIT_CODE=%DecimalNumber%"
GOTO :EOF


The output is still the same.

##### Filename in test.cmd before CALL: ger_army_C #####
##### ##### DecimalNumber In RomanToDecimal.cmd: 100 ##### #####
##### RETURNVALUE in test.cmd after CALL: #####
##### errorlevel in test.cmd after CALL: 0 #####



How can i attach a file? I dont see an option to do it....

If you like, just use any *.dds file you find in the web and replace the name with "ger_army_C.dds".
Or just create a textfile with name "ger_army_C.dds"
Or better 3 files - "ger_army_C.dds", "ger_army_CI.dds","ger_army_CII.dds"
Then you can see how the cmd works.

The *.dds file is just a grafic counter for a game.

Directory structure:
    "basedirectory\localisation\"
    "basedirectory\gfx\mapitems\mapcounters\"

The "basedirectory" can be any directory you want.

Put the 3 files "ger_army_C.dds", "ger_army_CI.dds","ger_army_CII.dds" into "basedirectory\gfx\mapitems\mapcounters\"
The two files "test.cmd" and "_04_CODERomanInDezimal.cmd" into the "basedirectory"
The Output will be "Ava_Ger_Army_units.csv" in "basedirectory\localisation\"

Thanks for your help
Avanatus

Avanatus
Posts: 8
Joined: 26 Jul 2016 18:50

Re: Can't get returnvalue from called batch file

#15 Post by Avanatus » 28 Jul 2016 15:11

Hi douglas,
in the meantime i played a lill bit arround.

I found out:

If i remove the

Code: Select all

CALL _04_CODERomaninDezimal.cmd SETCodeStart !Filename!


from the FOR ... IN ... DO statement

Code: Select all

FOR %%i IN (!SourceDirectoryCounter!*!FileExtension!) DO (
   SET Filename=%%~ni
   CALL :StrLength !Filename!
   CALL :SETStrLengthRomanNumber
   CALL :SETLocalisationText
)


and place it under the label

Code: Select all

::SETLocalisationText


Code: Select all

::SETLocalisationText
   CALL _04_CODE_RomanToDecimal.cmd SETCodeStart !RightString! !SETStrLengthRomanNumber!
   SET DecNumFromErr=%errorlevel%
   SET DecimalNumber=!RETURNVALUE!
   ECHO !Filename!;!DecimalNumber!.!PreText!;!DecimalNumber!.!PreText!;!DecimalNumber!.!PreText!;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFileName!
   ECHO !Filename!_short;!TextShort!;!TextShort!;!TextShort!;;;;;;;;;;;x>> !DestinationDirectoryLocalisation!!LocalisationFilename!
   SET /a Counter+=1
GOTO :EOF


...then all works fine - i get the RETURNVALUE.

So it looks for me it has something to do with the FOR... IN.. DO.. Part.

This is fine for me - in the future i will make a Label inside the FOR... IN... DO Part and jump to it.

But why is it not working inside the FOR... IN... DO... Statement?

Avanatus

Post Reply