批处理脚本不回显变量的内容,暂停不起作用



我正在编写一个脚本,该脚本遍历特定文件夹中的每个文件,从中读取一些信息,并对每个文件进行编号。

所以我用for循环来运行这些文件,这是正确的。现在我添加了一个变量i,它应该在循环的每次迭代中递增。

我在for循环中使用了set /a i=0set /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希望这对你有所帮助。

最新更新