2011-10-18 61 views

回答

10

這裏是我做到了,在批處理文件使用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 

第一行存儲,我們希望在一個變量來執行命令。它從環境變量中提取用戶名,並將其傳遞給net user命令以及/domain參數,以告知它從當前域中取消。然後它將結果從當前用戶的一堆數據中導出到find方法,該方法將只提取我們想要的屬性。查找結果的格式爲「全名John Doe」。第二行將執行命令並將結果放入變量fullNameText。第三行將刪除結果的「全名」部分,並以「John Doe」結尾。帶for循環的第四行將刪除結果中的所有前導空格,最後在fullName變量中出現「John Doe」。

+0

我們可以通過運行以下命令行commnad找到計算機的域名。 systeminfo | findstr/B/C:「域」 我們可以使用環境變量'Userdomain'找到登錄用戶的域。下面給出了這個命令。 echo%userdomain% – Sathish

+1

太棒了!在PowerShell中也是如此:((net user $ env:USERNAME/domain | Select-String「Full Name」)--replace「Full Name」,「」)。Trim() –

+0

我需要圍繞%command%逗號在第二行,使其工作:(「‘%命令%’」) – elady

0

我構建了一個批處理文件,通過使用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 

我希望它有幫助。

+0

剛導致無限循環的錯誤提示:無效的全局開關。 –

4

這裏的skeletank's響應這是稍微乾淨是爲我工作...的衍生物(我試過skeletank's響應,並沒有工作對我來說它是書面的,因此,下面我的回答方式。)

SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name"" 
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A 

然後,您可以在任何需要的地方使用「DNAME」,以便輸出回聲或使用「IF」語句進行驗證。您可以翻轉'%% B'和'%% A'標記以回到姓氏第一個佈局。這節省了skeletank's原始響應中使用的額外努力。

變量:
- TNAME =臨時名稱
- DNAME =顯示名稱

-Thanks skeletank

+0

工作就像一個魅力 – fmuecke

1

這應該是一個乾淨的方式使用dsquery和dsget而不依賴於「全名」,這是語言相關的輸出,而「FN」似乎與不同語言版本的Windows一起工作。

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i 

dsget -L開關給出了列出的輸出「fn:USER」,所以剩下的唯一東西就是抓住輸出中的第二列。 找到「fn:」用於擺脫「dsget succeeded」輸出。

+0

win10在cmd執行結果: 用戶名「')DO @echo我在這個時候是意外 看起來像它是從機器上不存在的dsquery –

+0

這是格式化的命令行使用。 ,請參閱我的回答,瞭解命令行和腳本格式之間的區別,該命令需要在運行它的計算機上安裝RSAT – Lectrode

0

如果你想爲人類使用 - 這意味着你不需要自動解析它,所以你得到只是的全名 - 你可以在命令提示符下鍵入net user <username> /domain,並宣讀了「全名」字段。

參考:Getting detailed domain user info from the command line

+1

鏈接斷開,並且當您登錄到其他域帳戶時此命令不起作用從你的機器連接到,在AD森林 –

+0

@MattKerr,我固定的聯繫,在一個蝙蝠結果由於 –

1

接受的答案(在發佈的時間)有4行代碼,當你只需要一個做同樣的事情:

for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o" 

這甚至會工作,如果全名已經超過200件。適用於Windows工作站「開箱即用」,不需要管理員權限。

注意:當在批處理文件中使用時,請記住分別將%n%o更改爲%%n%%o

解釋命令:

"tokens=2*指定唯一的令牌,將關注是後(分配到下一個字母:%o)的第二令牌(分配給%n),和一切

默認delims是空格,所以我們不需要定義它,但是如果我們需要手動定義它,它將如下所示:"tokens=2* delims= "。由於空格是分隔符,因此它將忽略所有前導空格。

管道(|)被胡蘿蔔(^)轉義,告訴命令處理器最初忽略它。

我也更喜歡用FINDSTR而不是FIND,因爲(在我的測試中)我發現它是更快的命令,如果您經常使用它,它可能會有所作爲。如果您願意,可以使用FIND "Full Name"輕鬆替換FINDSTR /C:"Full Name"

+0

win10 CMD執行: USERNAME「全名」「)是意外的在這個時候。 –

+0

如果用戶位於與當前連接到的域不同的域上(但仍位於AD forest w/trust中), 該請求將在域XXX.XXX.XXX的域控制器中處理。 無法找到用戶名。 通過鍵入NET HELPMSG 2221可以獲得更多的幫助。 –

+0

OP問題詢問命令「來自命令提示符」。我的回答是這樣格式化的。但是,我特別說明如何爲.bat腳本格式化它,如果您想爲此使用它。請參閱「注意」。 – Lectrode

1

Lectrode answer in one string will be like this:

for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b 
+0

請注意這是爲bat或cmd腳本格式化的。這不會起作用,因爲OP上面提到的 – Lectrode

+0

'''對於/ f「usebackq tokens = 2,* delims =」%a in('net user「%USERNAME%」/ domain^| find/i「 Full Name「')do set FULLNAME =%b''' ///只需將double%%更改爲%,它將從CMD起作用//// – kgimpel

相關問題