设置/ P不捕获IF语句中的输入

时间:2016-05-02 13:56:01

标签: batch-file if-statement

此批处理脚本中的所有内容都可以正常工作,但是当我输入IF语句时,出于某种原因set /p id=实际上并未捕获任何内容。事实上不久它就会回响:

  

您选择了会话%id%。

但是这将返回一个空白,好像没有为ID输入任何内容。

非常感谢任何建议。

@echo off

echo Please be sure CMD is being run as an administrator.

echo.

:loop

set /p targetpc="Which PC would you like to query for users (Hostname or IP)?: "

echo.

echo Querying %targetpc%...

echo.

quser /server:%targetpc%
echo.

set /p choice="Would you like to log a user off of %targetpc%? [Y/N]: "

echo.

IF /I "%choice%" EQU "Y" (

    echo Enter user's session ID:
    set /p id=
    echo.
    echo You chose session %id%.
    echo.
    logoff %id% /server:%targetpc% /V
    echo.
    echo Done!
    echo.
    goto loop
)

IF  /I "%choice%" EQU "N" (

    goto loop
)

1 个答案:

答案 0 :(得分:2)

您在设置它的同一个块中使用%id%值。在这种情况下,您需要使用延迟扩展。

将这些行分别添加到脚本的顶部和底部:

SETLOCAL EnableDelayedExpansion

<Your script>

ENDLOCAL

现在使用阻止扩展表示法(!围绕变量而不是%):

IF /I "%choice%" EQU "Y" (

    echo Enter user's session ID:
    set /p id=
    echo.
    echo You chose session !id!.
    echo.
    logoff !id! /server:%targetpc% /V
    echo.
    REM Note, replacing with a period here.
    echo Done.
    echo.
    goto loop
)

此网站上有很多关于延迟扩展的其他问题,因此如果您需要,在标记内快速搜索会产生大量其他信息。