it-swarm-ja.com

ネットグループコマンドをリスト形式でバッチで出力する方法

グループ内の多数のユーザーを3列の形式で出力するnet group "Groupname" /domainコマンドを使用しています。列の間にスペースがあります。

1行に1人のユーザーがいるようにコマンドを出力するにはどうすればよいですか?

1
Ice

次回質問する前に、何か試してみてください。

コマンドの出力が大まかに次のようになっていると仮定します。

bossMan    Arescet    Ice
superuser  lazyWorker Dog 
(etc...)

これを書いている場所からのこのファイルの出力がわからないので、無視する必要がある出力のプレフィックスが与えられているかどうかわかりません。

:: First attempt with a single line;
for /f %%G in ('net group "Groupname" /domain') do (echo %%G)

今では、バックアップと奇妙な文字処理の習慣でファイルを使用することを好むので、これを使用しますが、3行でファイルに書き込みます。

:: Write the output of your command into a file:
net group "Groupname" /domain >userList.temp

:: Split the content by spaces, and write each space separated token.
:: Column 1 is %%~G, 2 is %%~H, 3 is %%~I. 
for /f %%G in (userList.tmp) do (
    echo %%~G
    echo %%~H
    echo %%~I
)

:: Cleanup the temp file;
del "userList.temp"

もちろん、>>output.ext%%~G %%~H %%~Iに個別に適用することも、現在の行の指定された列を使用して呼び出すこともできます。

1
Bloodied

Tokens = 1,2,3オプションを使用してください

echo off
:: Write the output of your command into a file:
net group "Groupname" /domain >userList.temp

:: Split the content by spaces, and write each space separated token.
:: Column 1 is %%~G, 2 is %%~H, 3 is %%~I. 
for /f "skip=8 tokens=1,2,3" %%G in (userList.temp) do (
    echo %%G
    echo %%H
    echo %%I
)

:: Cleanup the temp file;
del "userList.temp"
pause
echo on
0
Slave

このスクリプトを作成するために多大な労力を費やしてくれてありがとう、それは非常にうまく機能しました。
しかし、いくつかのグループを評価したかったので、グループを引数として渡し、出力をファイルに書き込む機能を追加しました。既存のソリューションのごくわずかな調整。

echo off
set GRP_NM=%1
:: Write the output of your command into a file:
net group "%GRP_NM%" /domain >userList.temp

:: Split the content by spaces, and write each space separated token.
:: Column 1 is %%~G, 2 is %%~H, 3 is %%~I. 
echo UserName > %GRP_NM%_userlist.txt
for /f "skip=8 tokens=1,2,3" %%G in (userList.temp) do (
    echo %%~G >> %GRP_NM%_userlist.txt
    echo %%~H >> %GRP_NM%_userlist.txt
    echo %%~I >> %GRP_NM%_userlist.txt

)

:: Cleanup the temp file;
del "userList.temp"
::pause
echo on
0
BKCLAW113