I'm creating a simple environment setup cmd script and I'm using doskey to setup various aliases and macros. The environment I'm on has various repositories and I wanted to create some macros for quick navigation of popular directories.
I currently have the following:
@echo off
Setlocal EnableDelayedExpansion
set PROJECTS_PATH=%SystemDrive%\Projects
echo. Updating path...
REM Update PATH here
echo. Setting up macros...
doskey np="%SystemRoot%\System32\notepad.exe" $*
doskey np+="%ProgramFiles(x86)%\Notepad++\notepad++.exe" $*
doskey ..=cd ..
doskey trunk=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk ^& cd "!PROJECT_ROOT!"
doskey trunk2=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk2 ^& cd "!PROJECT_ROOT!"
doskey root=cd "%PROJECT_ROOT%"
doskey tools=cd "%PROJECT_ROOT%\tools"
What I was hoping would happen was that I could use the trunk macro to set the PROJECT_ROOT variable, then navigate to this newly set variable using delayed expansion. Then if I use the trunk2 command it would again reset the PROJECT_ROOT variable and navigate to that location. Finally, with the PROJECT_ROOT variable dynamically set, the root and tools macros could be the same regardless of which project root I'm at.
Unfortunately this doesn't work since it seems that PROJECT_ROOT is evaluated when the macro is created. So the result of running the macro trunk is the variable gets set and then execution of cd "".
Is there any way I can have the macro re-evaluate the PROJECT_ROOT variable in case it has changed?