I’m porting a Linux tool-set that makes frequent use of shell functions to provide certain functionality. These functions are automatically sourced when you start a new shell and include things like changing the working directory, which is nigh impossible with stand-alone programs because child processes can’t change their parent’s environment.
For example, there is a function cdbm which changes the working directory to one that was previously bookmarked. Now I want to do the same on Windows, but I’m stuck with cmd.exe. As far as I understand the scripts could be ported to jscript, vbscript or plain batch, which shouldn’t be a problem. But how do I make sure they automatically get sourced on startup and live in the shell’s environment?
According to
help cmd:If /D was NOT specified on the command line, then when CMD.EXE starts, it looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if either or both are present, they are executed first. HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun and/or HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRunAs a test, in
regeditI created a new key in the HLM branch shown above called “AutoRun” with the string value “echo Hi”. When I started a new instance ofcmdI got:You could put in the name of a script to run instead (I would put in a fully specified path to the script or one with a environment variable in it like “%HOMEPATH%\scripts\scriptname” (including the quotes in case there are spaces in the name).
Edit:
The registry key has some side effects. One example is
help. If I have theechocommand above, for example, in the AutoRun when I typehelp volI get a “Hi” right above the help text. Doingvol /?, though doesn’t do that.