batch file:是否有可能提取索引是一个variables的子string?

如果我有两个variables, stringindex ,我想从索引中提取一个子string,我可以使用SET命令来做到这一点? 例如:

 @ECHO off SET string=Hello SET index=3 ECHO %string:~%index%% 

当预期的结果是lo时,它返回Helloindex% 。 我正在尝试做什么?

问候,

安德鲁

Solutions Collecting From Web of "batch file:是否有可能提取索引是一个variables的子string?"

 @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET string=Hello SET index=3 ECHO !string:~%index%! GOTO :EOF 

当然。 这里有一个方法,使用delayedexpansion。

您可能使用哪种方法取决于您的意图和参数。 你的问题对于众多的解决方案和特殊情况来说太笼统了。

括号内的子串的情况下,你可以使用这个 – 再次比CALL方法更快,但有点冗长(例如for循环,如果条件…):

 @ECHO off set start=2 set end=5 set str=Hello World echo %str:~2,5% setlocal enableDelayedExpansion for /f "tokens=1,2" %%a in ("%start% %end%") do echo !str:~%%a,%%b! endlocal 

如果您的子字符串不是在括号内提取的(与magoo的回答相同):

 @ECHO off set start=2 set end=5 set str=Hello World setlocal enableDelayedExpansion echo %str:~2,5% echo !str:~%start%,%end%! endlocal 

另一种方法是使用CALL ,但是速度要慢得多(尽管它需要更少的代码):

 @ECHO off set start=2 set end=5 set str=Hello World echo %str:~2,5% call echo %%str:~%start%,%end%%% 

它也可以用一个子程序来完成,但是它也使用CALL ,它不是非常高效的方式:

 @ECHO off set start=2 set end=5 set str=Hello World call :substr "%str%" %start% %end% goto :eof :substr setlocal enableDelayedExpansion set "_str=%~1" echo !_str:~%2,%3! rem without delayedExpansion rem call echo %%_str:~%2,%3%% endlocal goto :eof