If you shuffle a lot between Linux/Mac and Windows OS, you surely miss many Linux shell commands in Windows Command Prompt and you definitely wish if you can replicate or have some kind of workaround of those commands in Windows to make life bit easier. One of those commands is navigating back to the previous directory. In Linux, you can just type:
cd - and voila, you go back to your previous directory. No need to check paths of previously entered directories. That’s one handy command. As usually happen with most productive shell commands, there is no equivalent command parameter in DOS.
I was looking for some kind of workaround to achieve same in DOS but when I couldn’t find any solution online so I decided to devise and build my own solution. It started with a very basic DOS batch file which just simulates Linux
cd – command but slowly and gradually it grows over the period of time as I added more and more features.
So how does it work? To implement this solution, you will need two batch files: ccd.bat and dos_init.cmd. ccd.bat will have actual batch commands which take care of redirecting command to appropriate branch and keeping the history of visited directories whereas dos_init.cmd will create DOSKEY aliases for cd command. You should create both files in one of your PATH directories (for example C:\Windows) so that DOS will able to locate these in Command Windows.
@echo off if '%*'=='' goto show_current_directory if '%*'=='~' goto home_directory if '%*'=='-d' goto my_documents_directory if '%*'=='-p' goto program_files_directory if '%*'=='-w' goto windows_directory if '%*'=='--' goto previous_directory if '%*'=='-' goto toggle_directory goto change_directory :show_current_directory cd goto batch_end :home_directory call:GotoDirectory %HOMEPATH% goto batch_end :my_documents_directory call:GotoDirectory %HOMEPATH%\Documents goto batch_end :program_files_directory call:GotoDirectory "%PROGRAMFILES%" goto batch_end :windows_directory call:GotoDirectory %WINDIR% goto batch_end :previous_directory set current_dir=%cd% popd goto batch_end :toggle_directory set current_dir=%cd% cd %previous_dir% set previous_dir=%current_dir% goto batch_end :change_directory call:GotoDirectory %* goto batch_end :GotoDirectory pushd . set previous_dir=%cd% cd %~1 goto:eof :batch_end
@echo off doskey cd=ccd $* doskey cd..=ccd .. doskey cd--=ccd -- doskey cd-=ccd - doskey cd\=ccd
You always require running dos_init.cmd before using ccd.bat so that assign aliases are available for ccd batch file. To automate that, you can simply add an entry in Windows Registry which will automatically run dos_init.cmd command every time you open Command Windows.
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor] AutoRun=C:\Windows\dos_init.cmd
Following are steps to create above Registry entry. Be careful when editing the registry and make sure you know what you’re doing.
- Open Windows Registry.
- Go to registry path:
- Create a registry entry with key as “AutoRun” and value as complete path of your dos_init.cmd
And that’s all we need.
Let's go through the usage of this batch file:
I hope you will find this hack useful. So how you want to further enhance this batch file? Please do share your changes and improvements here so that others can also benefit.