При запуске командной строки script можно ли получить имя текущего пользователя? ОС - Windows XP.
Как вы находите текущего пользователя в среде Windows?
Ответ 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