我正在使用批处理文件来显示某种数字,例如 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
你能帮我编辑一下吗?
答案 0 :(得分:2)
@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
和括号内的代码)时,在开始执行代码之前,所有变量读取都将替换为变量中的值。因此,如果在块内更改变量并且需要在同一块内检索值,则必须使用延迟扩展,告诉解析器引用的变量为!var!
(而不是{{1不应该在分析时替换它,它的值应该在执行时访问。
因此,在此代码%var%
和%baseName%
中使用通常的语法,因为它的值在%extension%
代码块中没有变化,但for
使用延迟扩展。它的值在块内变化,并且必须在同一块内访问该值。
0前缀和从变量右侧提取两个字符的串联确保了值1到9的初始值0的存在