Windows中是否有任何环境变量或其他格式的配置文件路径?我想以这样的方式查询,我应该得到值“C:\ Documents and Settings(如果是Windows XP或2k3)或C:\ users(如果是vista或windows 7)。
我不希望将当前用户名附加到字符串,我可以通过%USERPROFILE%变量获取。
答案 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)