Существует ли какая-либо переменная среды, представляющая папку «C: \ Documents and Settings» или папку C: \ Users в Windows? - PullRequest
7 голосов
/ 22 декабря 2010

Существует ли какая-либо переменная среды или другой формат, в котором путь к профилю представлен в Windows?Я хочу сделать запрос таким образом, чтобы получить значение «C: \ Documents and Settings (если Windows XP или 2k3) или C: \ users (Если Vista или Windows 7).

Я не хочутекущее имя пользователя добавлено в строку, которую я могу получить через переменную% USERPROFILE%.

Ответы [ 5 ]

10 голосов
/ 22 декабря 2010

Не существует.Вместо этого попробуйте %USERPROFILE%\..

Предупреждение: как подсказывает @Mark, это ненадежно, поскольку каталог профиля пользователя действительно может находиться в произвольном месте.

3 голосов
/ 22 декабря 2010

В Vista + вы можете использовать FOLDERID_UserProfiles для получения C: \ Users (или чего бы то ни было в локализованных версиях и т. Д.).В XP и более ранних версиях вам в значительной степени придется идти по маршруту CSIDL_COMMON_DESKTOPDIRECTORY, который даст вам «C: \ Documents and Settings \ All Users \ Desktop», и вернуться обратно оттуда.

Я думаю, что это решает вопрос для Vista.Для XP решение не идеально, но, по крайней мере, оно не будет зависеть от текущего профиля пользователя.«Все пользователи» всегда будут существовать, и я не могу придумать причину, по которой он находится в месте, отличном от места по умолчанию.

2 голосов
/ 08 февраля 2011

Да, на самом деле есть способ заставить его работать:

%USERPROFILE%\..
2 голосов
/ 22 декабря 2010

Насколько мне известно, нет, но вы можете сделать последний экземпляр '/', чтобы найти родительский каталог% USERPROFILE%

1 голос
/ 07 октября 2012

Я вывел пакетный метод и метод VBS (ниже), поскольку нигде не смог найти эквивалентный пакетный метод или метод VBS для этого вопроса.Если я не должен добавлять его в эту ветку (jscript), пожалуйста, добавьте комментарий о том, как и куда он должен идти, и я удалю этот ответ и пост в соответствии с указаниями.:)

Пакет (одна строка - без возврата каретки):

for /f "tokens=2*" %%f in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory ^|find /i "Profiles"') do @set ProfDir=%%g

VBScript:

' http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/registry/#ListRegFiles.htm

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath,_
 arrValueNames, arrValueTypes

For i=0 To UBound(arrValueNames)
'    StdOut.WriteLine "File Name: " & arrValueNames(i) & " -- "
    oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,_
    arrValueNames(i),strValue
'    StdOut.WriteLine "Location: " & strValue
'    StdOut.WriteBlankLines(1)
    IF arrValueNames(i) = "ProfilesDirectory" THEN ProfileRoot= strValue
Next

wscript.echo("ProfileRoot=" & ProfileRoot)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...