In the past I have advocated (and still do advocate) the use of a user variable in SSIS packages to store the path to a folder on the hard drive; I always use a variable called @[User::RootFolder] for this. Having this path available within a package variable enables you to dynamically set the location of files that your package may reference such as other packages, raw files, source files, log files etc..
Typically the value of this variable would get set by a configuration or the /SET option of dtexec however you do run the risk that someone might supply a path that does not have a backslash on the end of it and if you have expressions in your package that assume the presence of a backslash then you're going to get an error somewhere along the way.
There's an easy prevention to this problem of course. In addition to @[User::RootFolder] I also have a variable called @[User::ValidRootFolder]. The value of this variable is set dynamically using the following expression:
- RIGHT(@[User::RootFolder], 1) == "\\" ? @[User::RootFolder] : @[User::RootFolder] + "\\"
What this expression basically says is:
IF (rightmost character of RootFolder is a backslash)
return RootFolder
ELSE
return RootFolder concatenated with a backslash
Its a very simple check to put into your packages that can save some heartache down the line. In fact, why not make things even easier on yourself and put @[User::ValidRootFolder] into your template package?
Of course, this wouldn't be necassary if @[System::PackageLocation] existed.
Comments are welcomed.
-Jamie
P.S. Matthew Roche has a similar discussion here.