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



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

550   11  

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.

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

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

Comments

    Ничего не найдено.