我正在使用批处理文件来显示某种数字,例如 00_test.txt 01_test.txt...10_test.txt 11_test.txt 因此,这是我的代码。但我不能像我期望的那样表现出来
FOR /L %%x IN (1,1,10) DO (
set "extension=.txt"
set "fullname=%x%_test%extension%"
echo.%fullname%
)
上面代码的结果是_test.txt _test_txt
但预期的结果是
00_test.txt 01_test.txt
你能帮我编辑一下吗?
最佳答案
@echo off
setlocal enabledelayedexpansion
set "baseName=_test"
set "extension=.txt"
for /l %%a in (1 1 10) do (
set "n=0%%a"
echo !n:~-2!%baseName%%extension%
)
当解析器到达一段代码(在您的例子中是 for
和括号内的代码)时,在开始执行代码之前,所有变量读取都将替换为变量中的值.因此,如果一个变量在 block 内发生变化,并且需要在同一 block 内检索值,则有必要使用延迟扩展,告诉解析器引用为 !var!
的变量(而不是 %var%
),不应在解析时替换,其值应在执行时访问。
所以,在这段代码中,%baseName%
和 %extension%
与通常的语法一起使用,因为它的值在 for
中不会改变代码块,但 !n!
使用延迟扩展。它的值在 block 内改变,这个值必须在同一个 block 内访问。
0 前缀的连接和从变量右侧提取的两个字符确保了值 1 到 9 的初始 0 的存在
关于windows - 如何在批处理文件中组合数字和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23890940/