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

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

Ответ 1

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

Ответ 2

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

echo %USERNAME%

имя_домена

echo %USERDOMAIN%

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

Ответ 3

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

C:\> whoami

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

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

echo %userdomain%\%username%

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

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

Ответ 9

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

echo %USERNAME%

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

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

Ответ 10

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

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

Ответ 11

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