2016-05-02 1 views
1

このバッチスクリプトの内容はすべて正常に動作しますが、IFステートメントを入力すると何らかの理由でset /p id=が実際に何もキャプチャしません。実際にそれがエコーされる直後:IFステートメントで入力/ Pをキャプチャしない

セッション%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 
) 
+2

[バッチスクリプト値は変更されませんか?](http://stackoverflow.com/questions/12040697/batch-script-values-not-changing) – SomethingDark

答えて

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 
) 

遅延展開に関するこのサイトのその他の質問は数多くありますので、タグの中のすばやい検索では、必要な場合にはさらに多くの追加情報が得られるはずです。

+0

あなたは紳士で学者です。 +1。ご協力ありがとうございました。 –

関連する問題