批处理:当尝试输出变量内容时,ECHO始终处于打开状态

时间:2012-08-30 14:52:21

标签: for-loop batch-file echo

尝试运行脚本时,我总是收到消息“Echo is on”。

setlocal ENABLEEXTENSIONS
C:
cd ..
cd ..
reg query "HKLM\SYSTEM\CurrentControlSet\Services" | findstr /b "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DummyService" > "C:\servicePaths.txt"
FOR /f "delims=" %%g IN (servicePaths.txt) do (
  set KEY_NAME="%%g"
  set VALUE_NAME=ImagePath
    FOR /F "tokens=1-3" %%A IN ('REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul') DO (
    set ValueValue=%%C
    )
  echo %ValueValue%
  pause
)

任何批大师都可以帮帮我吗?我知道它与级联for循环有关,但我找不到解决方案 - 3小时后再也没有任何线索和错误。

1 个答案:

答案 0 :(得分:2)

这是扩展%ValueValue%的问题,因为在解析完整的括号块时会发生这种情况。
不是在执行时,但在解析时ValueValue变量为空,因此只有echo才能打印echo is on

只需将其更改为延迟扩展

@echo off
setlocal EnableDelayedExpansion
C:
cd ..
cd ..
set VALUE_NAME=ImagePath

reg query "HKLM\SYSTEM\CurrentControlSet\Services" | findstr /b "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DummyService" > "C:\servicePaths.txt"
FOR /f "delims=" %%g IN (servicePaths.txt) do (
  set "KEY_NAME=%%g"
    FOR /F "tokens=1-3" %%A IN ('REG QUERY !KEY_NAME! /v !VALUE_NAME! 2^>nul') DO (
    set ValueValue=%%C
    )
  echo !ValueValue!
  pause
)