Как можно получить Windows путь к профилю пользователя по умолчанию через CMD? - PullRequest
0 голосов
/ 14 апреля 2020

Windows профиль пользователя по умолчанию обычно %SystemDrive%\users\default, но его реальное местоположение не является переменной окружения, но может быть полезно иметь его. Путь к профилю пользователя по умолчанию может быть обнаружен запросом системного реестра следующим образом:

@echo off
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\ProfileList" /v "Default"') do set "defaultuserprofile=%%b"
echo %defaultuserprofile%
pause

Но мы получаем значение %SystemDrive%\Users\Default, где %SystemDrive% не преобразуется в C: ( или другую букву * 1009). *) поэтому переменная окружения %defaultuserprofile% не может использоваться как обычный путь к переменной окружения для файловых операций. Альтернативным вариантом может быть что-то вроде

@echo off
cd /d "%public%"
cd ..\
set usersdir=%cd%
set defaultuserprofile=%usersdir%\default
echo %defaultuserprofile%
pause

Но, похоже, это не так хорошо. Так как же получить Windows путь к профилю пользователя по умолчанию через CMD?

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020
@echo off
setlocal
set "defaultuserprofile="

for /f "tokens=1,2,*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v "Default"') do (
    if "%%~A" == "Default" call set "defaultuserprofile=%%C"
)

echo "%defaultuserprofile%"
pause

Тип данных REG_EXPAND_SZ. Чтобы развернуть %SystemDrive%, встроенный в строку, используйте call set. call вызывает другой анализ команды, так что set назначает C:\ вместо %SystemDrive%.

Как и второй код OP, который не так надежен, как запрос reg:

@echo off
cd /d "%Public%\..\Default" || exit /b 1
echo "%cd%"
pause

Если вы хотите просмотреть папку Default и другие скрытые папки в каталоге Users, используйте:

dir /a:h

Выходные данные - символическая ссылка с именем All Users, папка с именем Default и символическая ссылка с именем Default User на Windows 10 v1903.

0 голосов
/ 14 апреля 2020

Во-первых, просто упомянуть, что назначение профиля пользователя по умолчанию является основой для всех новых профилей пользователей. Поэтому его следует использовать только для настройки приложений, настроек и настроек для каждой будущей новой учетной записи пользователя на P C. (изменения внутри него не распространяются на существующих пользователей).

Следующий метод аналогичен существующему ответу в том, что дополнительное обслуживание используется для обслуживания любых переменных в содержащихся данных строка. Обратите внимание, что типом значения данных по умолчанию является REG_EXPAND_SZ, но он также может иметь тип REG_SZ (тип раскрытия необходим, только если строка содержит переменную).

@Echo Off
Set "RKey=HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList"
Set "RVal=Default"
Set "ProfilePath="
For /F "Tokens=2*" %%G In (
    '""%__APPDIR__%reg.exe" Query "%RKey%" /V "%RVal%" 2>NUL|"%__APPDIR__%find.exe" /I "%RVal%""'
)Do For /F "Tokens=*" %%I In ('Echo("%%~H"')Do Set "ProfilePath=%%~I"
If Not Defined ProfilePath Exit /B 1
Rem Your code using "%ProfilePath%" goes below here
Echo "%ProfilePath%" & Pause

У меня Rem появилась строка с комментарием, , которая может быть опционально опущена , и приведена примерная строка под ней для демонстрационных целей, Пожалуйста, измените это при необходимости .

Код использует полные пути для всех внешних команд (через специальную переменную %__APPDIR__%, , которая всегда будет указывать на их правильное местоположение ). Я сделал это для того, чтобы убрать любую зависимость от содержимого редактируемых переменных среды %PATH% и %PATHEXT%, (преднамеренное или случайное изменение этих двух переменных среды могло бы нарушить код) .

0 голосов
/ 14 апреля 2020

Неужели вы действительно не хотите %PUBLIC%, то есть C:\Users\Public? По крайней мере, это самый близкий эквивалент для Windows 10 к папке «По умолчанию».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...