如何在批处理脚本中使用 "LEFT()" 函数中的变量

How to use a variable in "LEFT()" function in batch script

恐怕很多人会觉得这是一个愚蠢的问题...

@ECHO off
SET str=HelloWorld
ECHO.%str%
SET str=%str:~0,5%
ECHO %str%

输出符合预期:

HelloWorld
Hello

但是下面这段代码...

@ECHO off
SET str=HelloWorld
ECHO.%str%
SET /A val=5
SET str=%str:~0,val%
ECHO.%str%

我直觉上期待相同的结果,但它的输出对我来说很奇怪。

HelloWorld
str:~0,val  

有人愿意分享为什么以及如何解决这个问题吗?

谢谢。

您必须使用 call命令,这会导致双倍执行 set 命令。变量 %val% 将在第一个设置运行时进行评估,这导致在第二个运行时会有一个数字。百分号必须以这种方式加倍 call SET str=%%str:~0,%val%%%