首页 > 解决方案 > 批处理脚本不回显变量的内容并且暂停不起作用

问题描述

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

所以我正在使用运行文件,并且工作正常。现在我添加了一个变量,该变量i应在循环的每次迭代中递增。

set /a i=0在for循环中使用了set /a i+=1and,这个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]
#@#HudIcons\VLC media player.ico
D:\Programme\VideoLAN\VLC\vlc.exe

我也刚刚意识到,循环第一次运行时,!i!确实可以正常工作并打印数字,但之后不会。

我知道我可能不应该像这样调用另一个批处理文件,但那是暂时的。

任何想法为什么这会表现得如此奇怪?

标签: windowsbatch-file

解决方案


如果没有递增方法,也许对你来说会更容易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%\System32\findstr.exe /EILN ".lnk"') Do (Echo=
    Echo [Button%%GBack]
    Call "get.bat" "%%H")
Pause

推荐阅读