是否有任何环境变量代表Windows中的“C:\ Documents and Settings”文件夹或C:\ Users文件夹?

时间:2010-12-21 21:21:17

标签: windows environment-variables javascript

Windows中是否有任何环境变量或其他格式的配置文件路径?我想以这样的方式查询,我应该得到值“C:\ Documents and Settings(如果是Windows XP或2k3)或C:\ users(如果是vista或windows 7)。

我不希望将当前用户名附加到字符串,我可以通过%USERPROFILE%变量获取。

5 个答案:

答案 0 :(得分:10)

它不存在。相反,请尝试%USERPROFILE%\..

警告:正如@Mark建议的那样,这是不可靠的,因为用户个人资料目录可能确实是任意位置。

答案 1 :(得分:3)

在Vista +上,您可以使用FOLDERID_UserProfiles来获取C:\ Users(或者本地化版本中的任何内容等)。在XP及更早版本中,您几乎必须使用CSIDL_COMMON_DESKTOPDIRECTORY路由,它将为您提供“C:\ Documents and Settings \ All Users \ Desktop”并从那里开始工作。

我认为这适用于Vista。对于XP来说,解决方案并不完美,但至少它不会取决于当前用户的配置文件路径。 “所有用户”将永远存在,我无法想到它在默认位置以外的地方。

答案 2 :(得分:2)

据我所知,不过你可以做'/'的最后一个实例来找到%USERPROFILE%的父目录

答案 3 :(得分:2)

是的,确实有办法让它发挥作用:

%USERPROFILE%\..

答案 4 :(得分:1)

我派生了批处理和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)