web-dev-qa-db-ja.com

CMDコマンドの出力を取得し、バッチ変数に設定します

このコマンドを実行してグループの名前を取得します。

set "remotegroup="
     for /f "skip=1delims=" %%a in (
     '"wmic group where sid="S-1-5-32-555" get name"'
     ) do if not defined remotegroup set "remotegroup=%%a"

しかし、私がこれを行うときecho "%rdpgroup%"出力は次のようになります:

"Remote Desktop Users  "

私はユーザーの終わりにそれらのスペースを望んでいません。次のような出力が必要です:"Remote Desktop Users"

7
Aria Fathi

WMICの出力はUnicodeです。

末尾の<CR>は、値を別のFOR/Fループに渡すことで削除できます。これにより、幻の「空白」行も削除されます(実際には<CR>

@echo off
set "remotegroup="
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
    for /f "delims=" %%b in ("%%a") do if not defined remotegroup set "remotegroup=%%~nb"
)
echo "%remotegroup%"
pause
8
Hackoo

同じ結果を得るさまざまな方法ThunderJunによる:

OP1:ここでは、setlocalを使用して、別のfor内でforを使用せずに、遅延型(!var!)の特殊変数の使用をアクティブにします。同じ結果を得るには。

OP2:ここでは、共通の型変数にコマンドを割り当て、垂直バーを使用して、常に最初に優先するいくつかのコマンドを組み合わせます。フィルタを追加します:more +1は、最初の出力行を無視することを示し、次にフィルタを追加します:findstr/i "remot"と別の垂直バー。これは、次のキーワードを含む行のみを出力することを示しています。引用符は大文字と小文字を区別しません。次に、最後の3文字を表示しないように、それを示す型変数commonを使用します:%var:〜0、-3%このように、forを別のfor内で使用しなくても同じ結果が得られます。

OP3:ここでは、setlocalを使用して、遅延型(!var!)の特殊変数の使用をアクティブにします。垂直バーを使用して、for内のコマンドの最後に。そのために、次のコマンドを使用してフィルターを割り当てます。findstr/i "remot"は、キーワードが引用符で囲まれた行のみを出力し、大文字と小文字を区別しないことを示します。遅延タイプの特別な変数を使用して、コマンド出力をキャプチャし、スペースの2文字を何も置換しない(!var:=!)ことを示し、forを別のtoから使用せずに同じ結果を達成します。

@echo off

:::::::::::::OP1 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "skip=1 delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name"') do (
set remotegroup=%%a!remotegroup:~0,-4!
set rio=!remotegroup:~0,-1!
set remotegroup=!rio:~0,-1!
)
echo  OP1 "%remotegroup%"
:::::::::::::OP1 END

:::::::::::::OP2 START. BY ThunderJun
set a='"wmic group where sid="S-1-5-32-555" get name |more +1 |findstr /i "remot""'
for /f "delims=" %%c in (%a%) do (set remotegroup=%%c)
echo  OP2 "%remotegroup:~0,-3%"
:::::::::::::OP2 END

:::::::::::::OP3 START. BY ThunderJun
setlocal enabledelayedexpansion
set remotegroup=
for /f "delims=" %%a in ('"wmic group where sid="S-1-5-32-555" get name |findstr "remot""') do (
    set remotegroup=%%~na& set remotegroup=!remotegroup:  =!)
echo  OP3 "%remotegroup%"
:::::::::::::OP4 END


pause
0
ThunderJun