是否有任何环境variables或configuration文件path在Windows中表示的其他格式? 我想查询的方式,我应该得到值“C:\ Documents and Settings(如果Windows XP或2k3)或C:\用户(如Vista或Windows 7)。
我不希望当前的用户名附加到string,我可以通过%USERPROFILE%variables。
它不存在。 相反,尝试%USERPROFILE%\..
警告:正如@Mark所示,这是不可靠的,因为用户配置文件目录可能真的是任意的位置。
在Vista +上,您可以使用FOLDERID_UserProfiles来获取C:\ Users(或者任何可能在本地化版本等)。 在XP和更早版本,你几乎必须去CSIDL_COMMON_DESKTOPDIRECTORY路线,将给你“C:\ Documents and Settings \所有用户\桌面”,并从那里工作。
我认为这解决了Vista。 XP的解决方案并不完美,但至少不会依赖于当前用户的配置文件路径。 “所有用户”将永远存在,我想不出有什么理由让它在默认的地方。
据我所知,不,但你可以做最后一个“/”的实例来找到%USERPROFILE%的父目录。
是的,实际上有一种方法来实现它的工作:
%USERPROFILE%\..
我推导了批处理和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)