2009-10-22 17 views
111

コマンドラインスクリプトを実行しているときに、現在のユーザーの名前を取得できますか? OSはWindows XPです。 %USERNAME%Windows環境で現在のユーザーをどのように見つけますか?

+0

関連を:*(http://stackoverflow.com/questions/ [私はC#を使用して.NETで現在のユーザー名を取得するにはどうすればよいです?] 1240373)* –

答えて

144

は、ユーザー名変数を使用することができます。明らかに、これは簡単になりすますことができるので、セキュリティに頼らないでください。

ヒント:コマンドプロンプトにsetと入力すると、すべての環境変数が表示されます。

+2

変数名にパーセント記号がありません。パーセント記号は、コマンドプロンプトでのみ必要です。 – kurast

42

それは%USERNAME%にする必要があります:

+1

あなたの 'net configワークステーション| "User name"のコメントは非常に便利です。それはちょうどコメントではなく答えだったはずです – Alpay

66

ユーザー名:

echo %USERNAME% 

ドメイン名:

echo %USERDOMAIN% 

あなたは、コマンドプロンプトからコマンドsetを実行して、環境変数の完全なリストを取得することができます。

3

常にWindowsは、このようなwho/whoamisedAWKなどのUnixのより有用少しスクリプティングユーティリティのいくつかを持っていませんどのように私を悩ませています。あなたは誰にでも何かをしたい場合はとにかく、Visual StudioのExpressを取得し、次のようにコンパイルします。

#include <windows.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
    printf("%s", GetUserName()); 
} 

そして、ちょうどあなたのバッチファイルであることを使用しています。

+0

ええ、それは内蔵されていることがうれしかったでしょう。 – Geo

+8

sedとawkが便利だと私は同意しますが、ここでは50%の方法が得られます。 'net config Workstation | Windows Vistaから「ユーザー名」「 –

+9

」whoamiが利用可能です。 – Joey

3

%USERNAME%は、現在実行中のプロセスのユーザー名を取得します。バッチファイルの実行方法によっては、必ずしも現在のユーザーの名前と同じではありません。たとえば、スケジュールされたタスク、サービスなどからバッチファイルを実行している可能性があります。

ここでは、現在ログインしているユーザーのユーザー名を取得する方法として、開始したユーザーの名前explorer.exeのタスク:私はテストのためのバッチファイルを書き込むには、このメソッドを使用

for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c 
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b 
2

echo %userdomain%\%username% 

認証が必要な場合は、プレーンテキストにパスワードを含める必要がありますので、私は他のユーザーがそれを見ることができないか、パスワードを見て、ユーザは何の影響を負わないならば、完全にプライベートな環境の中でそれを使用します。

これは誰かを助けることを望みます。

0

標準的なコンテキストでは、接続されている各ユーザはexplorer.exeプロセスを保持しています。コマンド[tasklist/V | find "explorer"]は、explorer.exeプロセス所有者を含む行を返します。必要な値を得る。まれに、explorer.exeが別のプログラムに置き換えられる場合があります。findフィルタは、このケースに一致するように適合させることができます。コマンドが空行を返す場合は、ユーザーがログオンしていない可能性があります。 Windows   7では、[query session | find ">]を実行することもできます。

46

ただ、コマンドプロンプトで次のコマンドを使用します。

C:\> whoami 
13

%USERNAME%は、Windows環境でのバッチおよびその他における正解です。

もう1つの方法はC:\Users\usernameのように、ユーザーのパスを取得するために%USERPROFILE%を使用することです。

0

私のバッチスクリプトを実行している間に、私は何かを追加する必要があります。 "%% a %% b" == "User Name:"でキャッチされる私のWindows言語バージョン(ポーランド語)の行には本当に合っています(私の言語では分音文字が含まれています) 8日に運営しています。

@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H 
2

ほとんどの場合、%USERNAME%変数は必要なものになります。

echo %USERNAME% 

ただし、昇格したcmdシェルを実行している場合、%USERNAME%は自分のユーザー名ではなく管理者名を報告します。あなたは後者をお知りになりたい場合は、次のコマンドを実行します(.NETから)

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u 
関連する問題