コマンドプロンプトから、現在ログインしているドメインユーザーのわかりやすい表示名( "john.doe"ではなく "John Doe")を取得するにはどうすればよいですか?
次に、バッチファイルでnetコマンドとfindコマンドを使用して行ったトリッキーな方法を示します。
set command=Net User "%USERNAME%" /domain | FIND /I "Full Name"
FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A
set fullName=%fullNameText:Full Name=%
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a
1行目には、実行するコマンドを変数に格納します。ユーザー名を環境変数から取得し、Net User
コマンドと/domain
パラメータに渡して、現在のドメインから取得するように指示します。次に、現在のユーザーに関する一連のデータであるその結果を、必要なプロパティのみを取得するfindメソッドにパイプ処理します。検索結果は、「フルネームJohn Doe」の形式です。 2行目はコマンドを実行し、結果を変数fullNameText
に入れます。 3行目は、結果の「フルネーム」部分を削除し、「John Doe」で終わります。 forループを含む4行目では、結果からすべての先行スペースが削除され、fullName
変数に「John Doe」が含まれます。
1つの文字列でのLectrodeの回答は次のようになります。
for /f "usebackq tokens=2,* delims= " %%a in (`Net User "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b
これは、言語に依存する「フルネーム」の出力に依存せずにdsqueryとdsgetを使用するクリーンな方法である必要があります。「fn」は、異なる言語バージョンのウィンドウで動作するようです。
for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i
Dsget -Lスイッチは、リストされた出力 "fn:USER"を提供するため、残っているのは、出力の2番目の列を取得することだけです。 find "fn:"は、 "dsget successful"の出力を取り除くために使用されます。
受け入れられた回答(投稿時)には4行のコードがありますが、同じことを行うのに必要なコードは1行だけです。
for /f "tokens=2*" %n in ('Net User "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"
これは、フルネームに2つ以上の部分がある場合でも機能します。 「そのまま」Windowsワークステーションで動作し、管理者権限を必要としません。
注:バッチファイルで使用する場合は、%n
および%o
をそれぞれ%%n
および%%o
に変更することを忘れないでください。
コマンドの説明:
"tokens=2*
は、注目する唯一のトークンが2番目のトークン(%n
に割り当てられている)とそれ以降のすべて(次の文字に割り当てられている:%o
)であることを指定します。
デフォルトのdelims
はスペースなので、定義する必要はありませんが、手動で定義する必要がある場合は、次のようになります:"tokens=2* delims= "
。スペースは区切り文字であるため、先頭のスペースはすべて無視されます。
パイプ(|
)はニンジン(^
)によってエスケープされ、コマンドプロセッサに最初は無視するように指示します。
(テストでは)より高速なコマンドであることがわかったため、FINDSTR
ではなくFIND
を使用することも好みます。これは、頻繁に使用すると違いが出る可能性があるためです。必要に応じて、FINDSTR /C:"Full Name"
をFIND "Full Name"
に簡単に置き換えることができます。
人間が使用したい場合-自動的に解析する必要がないため、フルネームだけを取得-Net User <username> /domain
コマンドプロンプトで、「氏名」フィールドを読みます。
Set pとgotoを使用してアクションを選択することにより、いくつかのことをすばやく実行するバッチファイルを作成しました。不要な部分は省いております。
@echo off
:begin
echo 5. Find who is on remote PC right now
echo.
set /p a=
IF %a%==5 (goto whoson)
REM Whos on
:whoson
set /p remotecomputername=Enter computer name to see the current user:
wmic /node:%remotecomputername% computersystem get username
pause
goto begin
お役に立てば幸いです。
リモートコマンドプロンプト(通常はPSexec.exeを使用してこれを確立します)から、「query user」と入力します。