11 ответов:
имя пользователя:
echo %USERNAME%имя домена:
echo %USERDOMAIN%вы можете получить полный список переменных окружения, выполнив команду
setиз командной строки.
Он должен быть в
%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