Как найти текущего пользователя в среде Windows?

при запуске скрипта командной строки можно ли получить имя текущего пользователя? ОС-это Windows XP.

11 ответов


вы можете использовать переменную username:%USERNAME%


имя пользователя:

echo %USERNAME%

имя домена:

echo %USERDOMAIN%

вы можете получить полный список переменных окружения, выполнив команду set из командной строки.


просто используйте эту команду в командной строке

C:\> whoami

это должно быть в %USERNAME%. Очевидно, это можно легко подделать, поэтому не полагайтесь на него для безопасности.

полезный совет: типа set в командной строке будут перечислены все переменные среды.


%USERNAME% является правильным ответом в пакетном и других средах Windows.

другой вариант-использовать %USERPROFILE% чтобы получить путь пользователя, например C:\Users\username.


%USERNAME% получит имя пользователя текущего запущенного процесса. В зависимости от способа запуска пакетного файла это не обязательно совпадает с именем текущего пользователя. Например, вы можете запускать пакетный файл через запланированную задачу, из службы и т. д.

вот более надежный способ получить имя пользователя текущего вошедшего в систему пользователя, очистив имя пользователя, который запустил проводник.задачи 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

меня всегда раздражало, что в Windows нет некоторых более полезных утилит сценариев Unix, таких как кто/whoami, sed и на awk. В любом случае, если вы хотите что-то надежное, получите Visual Studio Express и скомпилируйте следующее:

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

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

и просто используйте это в своем пакетном файле.


Я использую этот метод в написании пакетных файлов для тестирования.

echo %userdomain%\%username%

поскольку вы должны включить пароль в обычный текст, если требуется аутентификация, я буду использовать его только в полностью частной среде, где другие пользователи не могут его просмотреть или если пользователь, увидев пароль, не будет иметь никаких последствий.

надеюсь, это поможет кому-то.


в большинстве случаев переменная %USERNAME% будет тем, что вы хотите.

echo %USERNAME%

однако, если вы используете повышенную оболочку cmd, то %USERNAME% сообщит имя администратора вместо вашего собственного имени пользователя. Если вы хотите узнать последнее, запустите:

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

в стандартном контексте, каждый подключенный пользователь имеет проводник.exe процесс: команда [tasklist|V / find "explorer"] возвращает строку, содержащую проводник.exe процесс владельца, с адаптированным регулярным выражением можно получить необходимое значение. Это также отлично работает под Windows 7.

в редких случаях explorer.exe заменяется другой программой, фильтр поиска может быть адаптирован в соответствии с этим случаем. Если команда возвращает пустую строку, то, скорее всего, ни один пользователь войти. С Windows 7 также можно запустить [сеанс запроса|найти ">"].


Как найти BlueBearr ответ лучшим (хотя я,бегу мой пакетный скрипт с EG. Системные права) я должен что-то добавить к нему. Поскольку в моей версии языка Windows (польский) строка, которая должна быть поймана "%%a %%b "== "имя пользователя:" становится очень сложной (она содержит некоторые диакритические символы на моем языке), я пропускаю первые 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