Batch file 批处理文件:变量中的变量

Batch file 批处理文件:变量中的变量,batch-file,batch-processing,Batch File,Batch Processing,我正试图解析一个复杂的字符串。我有一个很短的子例程来调整两个特定字符的索引,我需要介于两者之间的字符串。因此,问题是: 如何在另一个变量的字符串操作中使用变量 下面是一些示例代码: @ECHO off set start=2 set end=5 set str=Hello World echo %str:~2,5% echo %str:~%start%,%end%% 如何让第二个回波显示第一个回波显示的内容?(现在第二个echo正在显示我想要的,它将按原样崩溃) 或者(最坏的方式) 或(如

我正试图解析一个复杂的字符串。我有一个很短的子例程来调整两个特定字符的索引,我需要介于两者之间的字符串。因此,问题是: 如何在另一个变量的字符串操作中使用变量

下面是一些示例代码:

@ECHO off

set start=2
set end=5
set str=Hello World

echo %str:~2,5%
echo %str:~%start%,%end%%
如何让第二个回波显示第一个回波显示的内容?(现在第二个echo正在显示我想要的,它将按原样崩溃)

或者(最坏的方式)

或(如果开始和结束定义以及子字符串都在括号上下文中,则可以使用)

或者(也是一种糟糕的方式)


代替你的版本。不需要
启用延迟扩展

老鼠,我甚至尝试了这两种方法。但在第一种情况下,我忘记启用延迟扩展,在第二种情况下,我忘记了最后的%。谢谢你的快速回复!
@ECHO off

set start=2
set end=5
set str=Hello World

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

set start=2
set end=5
set str=Hello World

echo %str:~2,5%
call echo %%str:~%start%,%end%%%
@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
@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
CALL echo %%str:~%start%,%end%%%