Batch file? Yes you heard me, batch file, you know .cmd.
This is an odd post for me, however I needed to do this recently and don’t want to forget how I did it. 
When automating builds I often take advantage of invoke process. It’s a nice way to keep my build process generic and call out to a process that may change over time or is specific to branch I am building. It allows me to keep some of the process specific to the source code, by storing the batch file with the source code. This also allows me to version the batch file if it changes over time, and ensure it available to the build server without installing it on the build server. None of this has anything to do with my blog post. Whatever the reason you may be calling out to a batch file using invoke process read on.
Have you ever had trouble passing variables like DropLocation or SourcesDirectory. If they have spaces in them you will need to put them in quotes. Lets say I want to pass the DropLocation to a batch file.
The arguments property of my invoke process would look like this. """" + DropLocation + """"
Notice the double quotes around the variable, to ensure they are passed to the batch file as one argument.
“\\My File Server\Drops\BuildDefinition_1.3.4636.1”
Without the quotes in this example my batch file would have received 3 arguments
- \\My
- File
- Server\Drops\BuildDefinition_1.3.4636.1
Therefore I need the Quotes.
In my batch file I want to access files in a subfolder of my DropLocation. So I need to concatenate the path passed in with another folder. Ultimately I want the location
\\My File Server\Drops\BuildDefinition_1.3.4636.1\MyFolder
The problem is with the double quote at the end of the argument this %1\MyFolder would end up being this “\\My File Server\Drops\BuildDefinition_1.3.4636.1”\MyFolder
Here is how to fix that problem.
First create a variable to hold your argument
set DROPLOCATION=%1
Then when you go to use the variable use a little string manipulation. Specifically ( :~f,e ) where f = the number of characters to strip from the start of the argument and e the number of characters to strip from the end.
Therefore to get ride of the double quotes at the end of our argument just remove the last character.
Like this %DROPLOCATION:~0,-1%\MyFolder"
The above syntax will result in this “\\Server\Drops\BuildDefinition_1.3.4636.1\MyFolder” making it possible to add my folder in the batch file instead of in the build process.