Reputation: 1671
Let me start by saying that I'm a linux guy and not really familiar with VBS or even windows global variables.
I'm being called upon to update a VBS script which basically copies the latest version of a access form to the computer. Currently it puts this access form in C:\MedMaint. The problem is that we do not run as administrators in this location. So when a new user tries to access the vbs script, the folder must be deleted by the original user. I need to change this script to the linux equivalant of ~/MedMaint, or "C:\Documents and Settings\MyUserName\Application Data\MedMaint"
Here is a sample of the code
If Not FSO.FileExists("c:\MedMaint\" & File.Name) Then
FSO.CopyFile File.Path, "c:\MedMaint\" ' copy the missing file
Else
Set RPFile = FSO.GetFile("c:\MedMaint\" & File.Name) ' Get the file object from the local object
If (File.DateLastModified >= RPFile.DateLastModified) Then
FSO.CopyFile File.Path, "c:\MedMaint\"
I would like to know how to change the c:\MedMaint\ reference to the user's home dir
Upvotes: 10
Views: 36007
Reputation: 97717
To get the path of the user's profile folder (e.g. C:\Documents and Settings\<username> in Windows XP or C:\Users\<username> in Windows Vista), you can do any of the following:
Evaluate the USERPROFILE
environment variable using the WshShell.ExpandEnvironmentStrings
method:
Set oShell = CreateObject("WScript.Shell")
strHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%")
Retrieve the folder path using the Shell.Namespace
method:
Const ssfPROFILE = &H28
Set oShell = CreateObject("Shell.Application")
strHomeFolder = oShell.NameSpace(ssfPROFILE).Self.Path
If you need the path of the application data folder (e.g. C:\Documents and Settings\<username>\Application Data in Windows XP or C:\Users\<username>\AppData\Roaming in Windows Vista), you can use similar code:
Set oShell = CreateObject("WScript.Shell")
strHomeFolder = oShell.ExpandEnvironmentStrings("%APPDATA%")
''# or
Const ssfAPPDATA = &H1A
Set oShell = CreateObject("Shell.Application")
strHomeFolder = oShell.NameSpace(ssfAPPDATA).Self.Path
To append a folder name to a path, you could simply use string concatenation like this:
strMedMaintFolder = strHomeFolder & "\MedMaint"
Alernatively, if your script contains many path concatenations, I suggest using the FileSystemObject.BuildPath
method, because it takes care of path separators (\
) for you:
Set oFSO = CreateObject("Scripting.FileSystemObject")
strMedMaintFolder = fso.BuildPath(strHomeFolder, "MedMaint")
Upvotes: 22
Reputation: 2909
Here is one way of doing it if you are using the Windows Scripting Host.
Set WshShell = CreateObject("WScript.Shell")
strHomeFolder = WshShell.ExpandEnvironmentStrings("%USERPROFILE%")
Upvotes: 1