VBScript get self and parent folder name

I'm overlooking somethign here. This script is saved as "location.vbs" and returns the name of the folder that location.vbs is in when run, and the parent folder. It works correctly when placed in any folder at least 3 directories down from the root, but fails on anything one or two directories from the root.

I'm having a brain-fade as to why. I need this to give me the name of the folder (note, NOT the path, just the folder name) that the script is sitting in when run, regardless of where that is. (The script will be moved, so it can't be hard-coded) and the name of the parent folder (if any, or null if the script is on root.)

Dim filesys
Set filesys = CreateObject("Scripting.FileSystemObject")
varPathCurrent = filesys.GetParentFolderName(WScript.ScriptFullName)
varPathParent = filesys.GetParentFolderName(varPathCurrent)
varPathGrandParent = filesys.GetParentFolderName(varPathParent)

varNameFolderCurrent = mid(varPathCurrent, len(varPathParent) + 2 , len(varPathCurrent) - len(varPathParent) - 1)
varNameFolderParent = mid(varPathCurrent, len(varPathGrandParent) + 2 , len(varPathCurrent) - len(varPathGrandParent) - len(varNameFolderCurrent) - 2)

msgbox varNameFolderCurrent & vbCrLf & varNameFolderParent
mcjAsked:
Who is Participating?
 
RobSampsonConnect With a Mentor Commented:
Hi there.

See if this works for you.

Regards,

Rob.
Dim filesys
Set filesys = CreateObject("Scripting.FileSystemObject")
varPathCurrent = filesys.GetParentFolderName(WScript.ScriptFullName)
varPathParent = filesys.GetParentFolderName(varPathCurrent)
varPathGrandParent = filesys.GetParentFolderName(varPathParent)
 
If filesys.FolderExists(varPathCurrent) Then
	If InStrRev(varPathCurrent, "\") < Len(varPathCurrent) Then
		varPathCurrent = Mid(varPathCurrent, InStrRev(varPathCurrent, "\") + 1)
	Else
		varPathCurrent = Left(varPathCurrent, Len(varPathCurrent) - 1)
	End If
Else
	varPathCurrent = ""
End If
 
If filesys.FolderExists(varPathParent) Then
	If InStrRev(varPathParent, "\") < Len(varPathParent) Then
		varPathParent = Mid(varPathParent, InStrRev(varPathParent, "\") + 1)
	Else
		varPathParent = Left(varPathParent, Len(varPathParent) - 1)
	End If
Else
	varPathParent = ""
End If
 
msgbox varPathCurrent & vbCrLf & varPathParent

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.