为什么这个REG QUERY命令适用于Win7,而不适用于WinXP

时间:2014-06-17 13:54:20

标签: windows batch-file

Comamnd是:reg query \\cois316\hklm\Software\Microsoft\.NETFramework /v EnableIEHosting

并且在Windows 7上这完美无缺,但在XP上我得到一个错误,上面写着“未找到网络路径”。主机名在网络上有效,我可以从我的机器ping到主机名。

脚本用于:

@echo off
cls
:start
echo Main Menu
echo ---------
echo 1) Get Reg Key Status
echo 2) Set Reg Key
echo 3) Exit
echo.

set /p MenuChoice=Choose an option: 

IF %MenuChoice% == 1 (
    set /p Hostname=Enter Hostname: 
    REG QUERY \\%Hostname%\HKLM\SOFTWARE\Microsoft\.NETFramework /v EnableIEHosting
    goto start
)


IF %MenuChoice% == 2 (
    set /p Hostname=Enter Hostname: 
    REG ADD \\%Hostname%\HKLM\SOFTWARE\Microsoft\.NETFramework /v EnableIEHosting /t REG_DWORD /d 

0x00000001
    goto start
)

IF %MenuChoice% == 3 ( 
    goto end
)


IF %MenuChoice% == 4 ( 
    set /p Hostname=Enter Hostname: 
    echo \\%Hostname%\HKLM\SOFTWARE\Microsoft\.NETFramework /v EnableIEHosting
    pause
)



cls

goto start

:END

1 个答案:

答案 0 :(得分:1)

好。问题出在以下块中:

IF %MenuChoice% == 1 (
    set /p Hostname=Enter Hostname: 
    REG QUERY \\%Hostname%\HKLM\SOFTWARE\Microsoft\.NETFramework /v EnableIEHosting
    goto start
)

为什么呢?一旦命令解释器命中一个()块,他就会自动解析该块中包含的所有变量。这意味着语句set /p Hostname=Enter Hostname:将起作用,但Hostname变量已经解决。为了证明这一点,尝试添加一个Echo。例如ECHO Hostname Entered is: %Hostname%

一旦您查询了某些内容并返回到:开始标签,然后再次查询另一台服务器,他就会使用之前输入的主机名。

要解决此问题,您必须使用感叹号将变量括起来。 %Hostname% - > !Hostname!
这仅在您最初在批处理文件中执行以下命令时才有效:

SETLOCAL ENABLEDELAYEDEXPANSION

它会以这种方式工作:

IF %MenuChoice% == 1 (
    set /p Hostname=Enter Hostname: 
    REG QUERY \\!Hostname!\HKLM\SOFTWARE\Microsoft\.NETFramework /v EnableIEHosting
    goto start
)

当然,你必须在所有其他街区改变这一点。

我认为这可以解决您在XP上的问题。