2010-12-21 78 views
6

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

我不想当前用户名附加到字符串,我可以拿到直通%USERPROFILE%变量

+3

正如你可以把用户配置文件的任何地方如你可以将标记设置为c:\ mark为什么你需要这个而不是USERPROFILE?还要注意最后一个目录不一定与用户名相同。 – Mark 2010-12-21 21:25:49

+0

是的马克..你说的是真的。我只想知道特定用户配置文件的位置?此外,我的环境不会“重定向”除默认位置以外的这些配置文件。 – svv 2010-12-21 21:34:21

回答

9

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

警告:如@马克指出,这是不可靠的,因为用户配置文件目录可能真的是任意的位置

+0

%USERPROFILE%将附加当前用户名。我想用它作为不同的用户名。我仍然可以通过脚本中的一些附加代码来实现。但只是想知道有没有更好的方法来做到这一点。 – svv 2010-12-21 21:30:10

2

据我所知不,但你可以做最后一个'/'的实例找到父亲的可怕%USERPROFILE%

3

在Vista +上,您可以使用FOLDERID_UserProfiles来获取C:\ Users(或任何可能在本地化版本等)。在XP和更早版本中,你几乎必须去CSIDL_COMMON_DESKTOPDIRECTORY路由,它会给你“C:\ Documents and Settings \ All Users \ Desktop”,并从那里开始工作。

我认为这解决了它的Vista。对于XP来说,解决方案并不完美,但至少它不会取决于当前用户的配置文件路径。 “所有用户”将一直存在,我想不出它是否在默认的地方。

2

呀实际上有办法得到它的工作:

%USERPROFILE%\.. 
0

我得到的批次和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) 
相关问题