As usual, this one was harder than it should have been. Granted, this task is pretty easy through the UI, but I have a bunch of environments to manage that must be the same… except for minor exceptions like the names of the site. Of course you have to supply the name of the site in these scripts. So what I did was find a way to output the name of the site based off the url of http://localhost and then set that to en environment variable that we use for the rest of the script.
You call this script with: scriptname vdirname path
%windir%system32inetsrvappcmd add apppool /name:%vdir%
FOR /F "tokens=*" %%i in (‘%windir%system32inetsrvappcmd list site http://localhost /text:site.name’) do SET IISSITENAME=%%i
%systemroot%system32inetsrvAPPCMD add app /site.name:%IISSITENAME% /path:/%vdir% /physicalPath:%path%
%systemroot%system32inetsrvAPPCMD set app "%IISSITENAME%/%vdir%" /applicationPool:%vdir%