Stian Mykland
Stian Mykland

Reputation: 56

can I use a variable to extract a substring in batch?

I need to extract the characters of a string one by one in a loop. Ideally, I would've done something like this, but as you might have guessed, it doesn't work.

@echo off
setlocal EnableDelayedExpansion
set /a len=5
set var=abcde
for /l %%n in (1,1,%len%) do (
    set /a num=%%n - 1
    echo %var:~!num!,1%
)

it works seamlessly if I replace !num! with a plain number, but with the variable, behaves as if the percent signs aren't there and echoes:

var:~0,1
var:~1,1
var:~2,1
var:~3,1
var:~4,1

Upvotes: 1

Views: 159

Answers (1)

user7818749
user7818749

Reputation:

To directly fix your issue replace:

echo %var:~!num!,1%

with:

call echo %%var:~!num!,1%%`

But you can do it without set /a num=%%n - 1 because you are already counting using for /L but note we are counting from 0.

Also note, we start couting from 0.
@echo off
setlocal EnableDelayedExpansion
set /a len=4
set "var=abcde"
for /l %%n in (0,1,%len%) do (
    echo(!var:~%%n,1!
)

Upvotes: 3

Related Questions