The problem solved here is two-fold:
- The ~dp syntax for getting the directory/path part only works for parameters and loop indexes, not on variables.
You can work around this by having a 1-iteration for-loop. - The :~ syntax for getting the substring works only for variables, not for parameters and loop indexes.
You can work around this by assigning to a temporary variable.
Example:
[sourcecode langauge=”text”]
echo batchfile=%0
echo full=%~f0
setlocal
::http://stackoverflow.com/questions/636381/what-is-the-best-way-to-do-a-substring-in-a-batch-file
set Directory=%~dp0
echo Directory=%Directory%
:: strip trailing backslash
set Directory=%Directory:~0,-1%
echo %Directory%
:: ~dp does not work for regular environment variables:
:: set ParentDirectory=%Directory:~dp% set ParentDirectory=%Directory:~dp%
:: ~dp only works for batch file parameters and loop indexes
for %%d in (%Directory%) do set ParentDirectory=%%~dpd
echo ParentDirectory=%ParentDirectory%
endlocal
[/sourcecode]
This will show:
- The directory of the batch file
- The directory but without the trailing backslash
- The parent directory of the batch file
Hope you can give this some use.
–jeroen





