2009-10-22 68 views
111

運行命令行腳本時,是否可以獲取當前用戶的名稱?操作系統是Windows XP。如何在Windows環境中找到當前用戶?

+0

相關(來自.NET):* [如何在.NET中使用C#獲取當前用戶名?](http://stackoverflow.com/questions/ 1240373)* – 2016-05-24 12:38:15

回答

144

可以使用用戶名變量:%USERNAME%

+2

變量名稱不帶百分號。百分號僅在命令提示符中需要。 – kurast 2015-02-04 13:57:53

42

應該在%USERNAME%。顯然這可能很容易被欺騙,所以不要依賴它來保證安全。

有用的提示:在命令提示符下鍵入set將列出所有環境變量。

+1

你的'淨配置工作站|找到「用戶名」的評論是非常有用的。它應該是一個答案,而不僅僅是一個評論 – Alpay 2015-08-25 07:26:03

66

用戶名:

echo %USERNAME% 

域名:

echo %USERDOMAIN% 

您可以通過在命令提示符下運行命令set獲取環境變量的完整列表。

3

它總是讓我很煩惱Windows如何沒有一些更有用的Unix腳本實用程序,如who/whoami,和AWK。無論如何,如果你想要的東西萬無一失,得到的Visual Studio Express和編譯如下:

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

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

,只是使用在您的批處理文件。

+0

是的,它會很高興有一個內置的。 – Geo 2009-10-22 14:12:59

+8

我同意sed&awk會很有用,但是這會讓你有50%的出路: 'net config Workstation |找到「用戶名」' – 2009-10-22 14:27:09

+9

'whoami'從Windows Vista開始可用。 – Joey 2009-10-22 16:53:00

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進程所有者的行,並且可以調整正則表達式獲得所需的價值。這也可以在Windows下完美運行  7.

在極少數情況下,explorer.exe被另一個程序替換,查找過濾器可以適應這種情況。如果該命令返回一個空行,那麼很可能沒有用戶登錄。使用Windows   7也可以運行[查詢會話|查找「>」]。

46

在命令提示符下就使用這個命令:

C:\> whoami 
13

%USERNAME%是批量正確的答案和其他在Windows環境。

另一種選擇是使用%USERPROFILE%來獲取用戶的路徑,如C:\Users\username

0

只要發現BlueBearr響應最好(而我,我運行我的批處理腳本與例如。系統權限)我不得不添加一些東西。 因爲在我的Windows語言版本(波蘭語)行中要被「%% a %% b」==「User Name:」捕獲的行會得到非常複雜的結果(它包含我的語言中的一些變音符號),所以我跳過前7行並在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%變量將是您想要的。但是,如果您運行的是提升的cmd shell,那麼%USERNAME%將報告管理員名稱而不是您自己的用戶名。如果你想知道後者,請運行:

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