See Also edit
Misc edit
On a Microsoft Windows system, the %HOMEPATH% is the name for what Unix/Linux users call $HOME. When combined with the %HOMEDRIVE% environment variable you get a complete path to the user's home directory.For example, if your username is “JRandom” then your home drive and path is probably one of the following:C:\Users\JRandom (Windows 7 and newer) C:\Documents and Settings\JRandom (XP and older)That is, %HOMEDRIVE% is “C:” and %HOMEPATH% is “\Users\JRandom” (or whatever).These path names may be localized into the PC’s language. When in doubt, use $env(HOME) or use the proper Microsoft Shell Functions (via the Ffidl or TWAPI packages).They may also be in non-default locations, like on drive D: or in some random other directory the user (unwisely) chose.
What follows is the original (incorrect) content of this page:
On a Microsoft Windows system, the path: D:\ is known as the HOMEPATH.On my windows box my HOMEPATH is:
\Documents and Settings\jrankinI'm not sure why it would ever be the root of d, unless it has been explicitly set that way. Given the location of this path, perhaps it refers to the Windows equivalent of the user's home directory? - WJR
ZLM:
C:\>set HOME HOMEDRIVE=P: HOMEPATH=\ HOMESHARE=\\acefpscpd001\PSI0005JLM$ C:\>p: P:\> P:\>cd %HOMEPATH% P:\> P:\>c: C:\> C:\>cd %HOMEPATH% C:\>
BR 2003-10-28: On my system (W2K) I see this:
c:\> set HOME HOMEDRIVE=C: HOMEPATH=\Documents and Settings\bennyI always interpreted this as that MS wanted something like $HOME on Unix, but in two pieces so that you can use it in batch files like
%HOMEDRIVE% cd %HOMEPATH%Note for those not familiar with Microsoft Windows command/batch language: On Windows, plain CD (Change Directory) doesn't change the drive. You do that by just giving the drive name, as the first line in the code example does.Tcl seems to think the same; it synthesizes a HOME variable for me from those bits, if I don't have one:
c:\> set HOME HOMEDRIVE=C: HOMEPATH=\Documents and Settings\benny c:\> tclsh % set env(HOME) C:\Documents and Settings\benny
TV XP SP1 gives:
HOMEDRIVE=D: HOMEPATH=\Documents and Settings\someinstallinheritedname SystemDrive=D: SystemRoot=D:\WINDOWScygwin on that sys (the most recent on complete install) gives:
HOMEDRIVE=D: HOMEPATH='\Documents and Settings\someinstallinheritedname' KDEHOME=/home/someinstallinheritedname/.kde2 PWD=/home/theo SYSTEMDRIVE=D: SYSTEMROOT='D:\WINDOWS' USER=theo USERNAME=theo USERPROFILE='D:\Documents and Settings\someinstallinheritedname' WINDIR='D:\WINDOWS'Under cygwin, like on Unix, you have a 'mount' command, where you can choose to mount to:
- a relative dir (probably not handy unless you want independent partion file trees with overlapping dirs)
- something like /bin, which refers usually to the c:/cygwin/bin or /cygdrive/<currentpartition>/cygwin/bin
- drive-defined path /cygdrive/c/cygwin/bin
RA Thanks to some help from Kaitzachu, I managed to make the following function that uses the Windows registry entries to get the right "My Documents" directory:
proc GetHomeDir { } { global env # Check if we're using windows if { [expr [string compare "$::tcl_platform(platform)" "windows" ] == 0] } { package require registry 1.0 set env_home [registry get {HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders} {Personal}] } else { set env_home $env(HOME) } return $env_home }It returns the "My Documents" directory on windows or the user's homedir on Unix/Linux. Not tested on Mac OS (X).jnc Dec 2, 2009 - This works pretty good for me, however on Windows 7 (unsure about Vista), it returns %USERPROFILE%\Documents, which is not directly usable. Thus, I made a modification to the above proc adding the following after where env_home is set to the registry key.
if {[string match %USERPROFILE%* $env_home]} { set env_home [string replace $env_home 0 12 $env(USERPROFILE)] }It would be nice for it to autoexpand any ENV variable found in the result but I didn't go through that much trouble as it now works on XP and Windows 7 (presumably on Vista as well) which are all I am concerned about (or can test) at the moment.
MG For me on Win XP Home SP2, I have HOME, HOMEDRIVE and %homepath% elements in my $env array in Tcl. That is, from the wish prompt:
% parray env HOME* env(HOME) = C:\Documents and Settings\User env(HOMEDRIVE) = C: env(HOMEPATH) = \Documents and Settings\UserI noticed that you can't use HOMEDRIVE and HOMEPATH to build up HOME manually, though, or at least not without some editing - the only way to get
C:/Documents and Settings/Userback from a [file join] is if you start with "C:/" and "Documents and Settings/User" - with no trailing slash on the drive, or with a leading slash on the path, the return value doesn't show the drive letter (and so refers to the path on the current volume, not necessary on $env(HOMEDRIVE)).escargo 6 Mar 2006 - I did the following on my work Windows XP SP2 system. I got something intriguingly different:
% parray env HOME* env(HOME) = W:\ env(HOMEDRIVE) = W: env(HOMEPATH) = \ env(HOMESHARE) = \\xioshare\users$\100607The W drive is a network drive; I've had some software (like stickies) misbehave because it assumes that HOME is located somewhere near the executing code. When I boot attached to my work network, that is false; if I boot detached or attached to my home network, it is true. It makes for interestingly variable behavior.