arkeyar
arkeyar

Reputation: 13

Dynamic sub-string in batch file

Code Excerpt of my batch file:

set stringOne=ABCDEF    
echo %stringOne:~2,3%  

This output is CDE

How can I dynamically echo the output for my start index and desired output length?

set stringOne=ABCDEF  
set start=2  
set len=3

Upvotes: 1

Views: 135

Answers (1)

Stephan
Stephan

Reputation: 56208

you need two layers of variable expansion. That can be done by delayed expansion or by call:

@echo off
setlocal enabledelayedexpansion
set "string=ABCDEFGH"
set "start=2"
set "len=3"

echo A with delayed expansion: !string:~%start%,%len%!
call echo A with using 'call': %%string:~%start%,%len%%%

FOR /F %%G IN ('dir /b "%~f0"') DO ( 
  set /A "newStart=!Start!+2" 
  call echo B with 'call' and delayed : %%string:~!newStart!,!len!%%
  call call echo B with double-'call': %%%%string:~%%newStart%%,%len%%%%% 
)

FOR /F %%G IN ('dir /b "%~f0"') DO call :output
goto :eof
:output
  set /A "newStart=Start+2" 
  echo C with subroutine and delayed expansion: !string:~%newStart%,%len%! 
  call echo C with subroutine andusing 'call': %%string:~%newStart%,%len%%% 
goto :eof

EDITED to match your comment. You need a third layer of expansion. I expanded the code with some different methods.
(btw: please don't post code in comments, it's nearly impossible to read. And if your question changes, better ask a follow-up question next time)

Upvotes: 1

Related Questions