首页 > 解决方案 > for循环内批处理脚本中的子字符串计算

问题描述

我试图在for批处理脚本中提取循环中的子字符串,但我遗漏了一些东西,因为它将在循环内延迟字符串。

下面是代码:请帮助如何做到这一点:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
FOR /F "tokens=1* delims=" %%A IN ('dir /b /a-d') DO (      
        echo %%A
        set directory=%%A
        :: am calculating length here based on some logic, lets assume it as 2 
        set length=2
        set myvar = !directory:~0:length!
        echo !myvar!
    )
endlocal
pause

立即输出

1.txt
ECHO is off.
2.txt
ECHO is off.
demo.cmd
ECHO is off.
Press any key to continue . . .

预期输出:

1.txt
1.
2.txt
2.
demo.cmd
de.
Press any key to continue . . .

标签: batch-filecmd

解决方案


如上面@Mofi 所指出的,留下上述脚本中的所有问题。这个问题可以通过使用以下计算子字符串来解决

对于 %%G In (!length!) 请设置 "myvar=!directory:~0,%%G!"

最终脚本:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
FOR /F "tokens=1* delims=" %%A IN ('dir /b /a-d') DO (      
        echo %%A
        set directory=%%A
        
        set length=2
        set myvar = !directory:~0:length!
        For %%G In (!length!) Do Set "myvar=!directory:~0,%%G!"
        echo !myvar!
    )
endlocal
pause

推荐阅读