我正在编写一个脚本,该脚本遍历特定文件夹中的每个文件,从中读取一些信息,并对每个文件进行编号。
所以我用for循环来运行这些文件,这是正确的。现在我添加了一个变量i
,它应该在循环的每次迭代中递增。
我在for循环中使用了set /a i=0
和set /a i+=1
,这个Set
命令确实将数字打印到控制台。我现在的问题是set
命令打印数字,但当我用echo %i%
回显数字时,它将始终打印0
,而不是递增值。我也试过echo !i!
,但根本不起作用。它只是在控制台中打印!i!
。
我还在脚本末尾添加了一个pause
命令,但它被完全忽略了。
这是我的批处理脚本:
@echo off
setlocal EnableDelayedExpansion
set /a i=0
for /r %%n in (Links*.lnk) do (
set /a i+=1
echo.
echo [Button!i!Back]
get.bat "%%n"
)
pause
这是一个输出示例:
45
[Button!i!Back]
#@#HudIconsVLC media player.ico
D:ProgrammeVideoLANVLCvlc.exe
我还刚刚意识到,循环第一次运行时,!i!
确实正常工作并打印数字,但之后不会。
我知道我可能不应该像这样调用另一个批处理文件,但这是暂时的。
你知道为什么这种行为如此怪异吗?
如果没有Set /A
递增方法,可能会更容易,因此不需要延迟扩展。替代方法可能包括使用findstr.exe
来提供计数:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Tokens=1,* Delims=:" %%G In ('Dir /B /S /A:-D "Links*.lnk" ^
2^> NUL ^| %SystemRoot%System32findstr.exe /EILN ".lnk"') Do (Echo=
Echo [Button%%GBack]
Call "get.bat" "%%H")
Pause
使用百分比符号调用变量%Variable%
并将其回声echo %variable%
设置一个set variable=value
希望这对你有所帮助。