2009-10-22 30 views

Trả lời

144

Bạn có thể sử dụng biến username: %USERNAME%

+2

Tên biến không có dấu phần trăm. Dấu phần trăm chỉ cần thiết trong Command Prompt. – kurast

42

Nó phải ở trong %USERNAME%. Rõ ràng điều này có thể dễ dàng giả mạo, do đó, không dựa vào nó để bảo mật.

Mẹo hữu ích: gõ set trong dấu nhắc lệnh sẽ liệt kê tất cả các biến môi trường.

+1

Máy trạm cấu hình mạng của bạn | tìm nhận xét "Tên người dùng" là rất hữu ích. Nó phải là một câu trả lời thay vì chỉ là một bình luận – Alpay

66

Tên đăng nhập:

echo %USERNAME% 

Domainname:

echo %USERDOMAIN% 

Bạn có thể có được một danh sách đầy đủ của các biến môi trường bằng cách chạy lệnh set từ dấu nhắc lệnh.

3

Nó luôn làm tôi bực mình vì sao Windows không có một số tiện ích tập lệnh nhỏ hữu ích hơn của Unix, chẳng hạn như who/whoami, sedAWK. Dù sao, nếu bạn muốn một cái gì đó dễ dàng, có được Visual Studio Express và biên dịch như sau:

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

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

Và chỉ sử dụng trong tập tin thực thi của bạn.

+0

Vâng, nó sẽ có được tốt đẹp để có một built-in. – Geo

+8

Tôi đồng ý rằng sed & awk sẽ hữu ích, nhưng điều này giúp bạn đạt được 50% trong số đó: 'net config Workstation | tìm "Tên người dùng" ' –

+9

'whoami' có sẵn bắt đầu bằng Windows Vista. – Joey

3

% USERNAME% sẽ đưa bạn tên người dùng của quy trình hiện đang chạy. Tùy thuộc vào cách bạn đang chạy tập tin thực thi của bạn, điều này không nhất thiết phải giống như tên của người dùng hiện tại. Ví dụ: bạn có thể đang chạy tệp batch của mình thông qua tác vụ được lập lịch, từ một dịch vụ, v.v.

Đây là cách chắc chắn hơn để nhận tên người dùng của người dùng hiện đã đăng nhập bằng cách gõ tên người dùng đã bắt đầu tác vụ 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

Tôi sử dụng phương pháp này để viết các tệp lô để thử nghiệm.

echo %userdomain%\%username% 

Vì bạn phải bao gồm mật khẩu trong văn bản đơn giản nếu xác thực là cần thiết, tôi sẽ chỉ sử dụng nó trong một môi trường hoàn toàn tin nơi người dùng khác không thể xem nó hoặc nếu người dùng nhìn thấy các mật khẩu sẽ không chịu hậu quả.

Hy vọng điều này sẽ giúp ai đó ra ngoài.

0

Trong ngữ cảnh chuẩn, mỗi người dùng được kết nối nắm giữ một quá trình explorer.exe: Lệnh [tasklist/V | find "explorer"] trả về một dòng chứa chủ sở hữu quá trình explorer.exe, với regex được điều chỉnh phù hợp để có được giá trị yêu cầu. Điều này cũng chạy hoàn toàn dưới Windows   7.

Trong trường hợp hiếm hoi explorer.exe được thay thế bởi một chương trình khác, bộ lọc tìm có thể được điều chỉnh cho phù hợp với trường hợp này. Nếu lệnh trả về một dòng trống thì có khả năng là không có người dùng nào được đăng nhập. Với Windows   7, bạn cũng có thể chạy [truy vấn phiên | tìm ">"].

46

Chỉ cần sử dụng lệnh này tại dấu nhắc lệnh:

C:\> whoami 
13

%USERNAME% là câu trả lời đúng trong hàng loạt và khác trong môi trường Windows.

Một tùy chọn khác là sử dụng %USERPROFILE% để nhận đường dẫn của người dùng, như C:\Users\username.

0

Theo như tìm thấy BlueBearr phản ứng tốt nhất (trong khi tôi, m chạy tập lệnh batch của tôi với ví dụ quyền SYSTEM) Tôi phải thêm một cái gì đó vào nó. Bởi vì trong dòng phiên bản ngôn ngữ Windows (Ba Lan) của chúng tôi sẽ bị bắt bởi "%% a %% b" == "Tên người dùng:" được thực thi hoàn toàn (có chứa một số ký tự dấu phụ trong ngôn ngữ của tôi), tôi bỏ qua 7 dòng đầu tiên và hoạt động vào ngày 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

Trong hầu hết các trường hợp, biến% USERNAME% sẽ là thứ bạn muốn.

echo %USERNAME% 

Tuy nhiên, nếu bạn đang chạy vỏ cmd cao thì% USERNAME% sẽ báo cáo tên quản trị viên thay vì tên người dùng của riêng bạn. Nếu bạn muốn biết điều sau, hãy chạy:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u 
Các vấn đề liên quan