批量提取变量的一部分(子串)

时间:2017-05-03 13:24:42

标签: windows batch-file variables

我有一些程序,其中一些有64位版本: foo.exe的 bar.exe bar64.exe等 所以想从文件名中提取2个最后一个字符(没有扩展名)然后做一些事情......

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "tokens=1,2 delims=." %%G in ('dir /b *.exe') do (
set _test=%%G
set _result=!_test:~-2!

echo !_result!
)

endlocal
exit

如果要提取的字符数不是2,这很有效。如果是2则回显变得疯狂。 是我做错了还是有些错误?

1 个答案:

答案 0 :(得分:1)

您确实使用了整个文件名,因为.exe是四个字符,您描述的错误不应该发生。 为了避免意外行为,可以使用任意两个字符简单地添加名称。

@echo off&setlocal enableextensions enabledelayedexpansion
for /f "tokens=*" %%G in ('dir /b *.exe') do (
    set "_test=__%%~nG"
    set _result=!_test:~-2!
    echo:!_result!
)

编辑要避免报告回显状态,请使用与空格不同的命令分隔符。