Aliases in Windows command prompt
WindowsAliasCommand PromptWindows Problem Overview
I have added notepad++.exe
to my Path in Environment variables.
Now in command prompt, notepad++.exe filename.txt
opens the filename.txt
. But I want to do just np filename.txt
to open the file.
I tried using DOSKEY np=notepad++
. But it is just bringing to the forefront an already opened notepad++ without opening the file. How can I make it open the file?
Thanks.
Windows Solutions
Solution 1 - Windows
To add to josh's answer,
you may make the alias(es) persistent with the following steps,
-
Create a .bat or .cmd file with your
DOSKEY
commands. -
Run regedit and go to
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
-
Add String Value entry with the name
AutoRun
and the full path of your .bat/.cmd file.For example,
%USERPROFILE%\alias.cmd
, replacing the initial segment of the path with%USERPROFILE%
is useful for syncing among multiple machines.
This way, every time cmd is run, the aliases are loaded.
For Windows 10, add the entry to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
instead.
For completeness, here is a template to illustrate the kind of aliases one may find useful.
@echo off
:: Temporary system path at cmd startup
set PATH=%PATH%;"C:\Program Files\Sublime Text 2\"
:: Add to path by command
DOSKEY add_python26=set PATH=%PATH%;"C:\Python26\"
DOSKEY add_python33=set PATH=%PATH%;"C:\Python33\"
:: Commands
DOSKEY ls=dir /B $*
DOSKEY sublime=sublime_text $*
::sublime_text.exe is name of the executable. By adding a temporary entry to system path, we don't have to write the whole directory anymore.
DOSKEY gsp="C:\Program Files (x86)\Sketchpad5\GSP505en.exe"
DOSKEY alias=notepad %USERPROFILE%\Dropbox\alias.cmd
:: Common directories
DOSKEY dropbox=cd "%USERPROFILE%\Dropbox\$*"
DOSKEY research=cd %USERPROFILE%\Dropbox\Research\
- Note that the
$*
syntax works after a directory string as well as an executable which takes in arguments. So in the above example, the user-defined commanddropbox research
points to the same directory asresearch
. - As Rivenfall pointed out, it is a good idea to include a command that allows for convenient editing of the
alias.cmd
file. Seealias
above. If you are in a cmd session, entercmd
to restart cmd and reload thealias.cmd
file.
When I searched the internet for an answer to the question, somehow the discussions were either focused on persistence only or on some usage of DOSKEY only. I hope someone will benefit from these two aspects being together here!
Here's a .reg
file to help you install the alias.cmd
. It's set now as an example to a dropbox folder as suggested above.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="%USERPROFILE%\\alias.cmd"
For single-user applications, the above will do. Nevertheless, there are situations where it is necessary to check whether alias.cmd
exists first in the registry key. See example below.
In a C:\Users\Public\init.cmd
file hosting potentially cross-user configurations:
@ECHO OFF
REM Add other configurations as needed
IF EXIST "%USERPROFILE%\alias.cmd" ( CALL "%USERPROFILE%\alias.cmd" )
The registry key should be updated correspondly to C:\Users\Public\init.cmd
or, using the .reg
file:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="C:\\Users\\Public\\init.cmd"
Solution 2 - Windows
You need to pass the parameters, try this:
doskey np=notepad++.exe $*
>Edit (responding to Romonov's comment) Q: Is there any way I can make the command prompt remember so I don't have to run this each time I open a new command prompt?
doskey
is a textual command that is interpreted by the command processor (e.g. cmd.exe), it can't know to modify state in some other process (especially one that hasn't started yet).
People that use doskey
to setup their initial command shell environments typically use the /K
option (often via a shortcut) to run a batch file which does all the common setup (like- set window's title, colors, etc).
cmd.exe /K env.cmd
env.cmd:
title "Foo Bar"
doskey np=notepad++.exe $*
...
Solution 3 - Windows
If you're just going for some simple commands, you could follow these steps:
- Create a folder called C:\Aliases
- Add C:\Aliases to your path (so any files in it will be found every time)
- Create a .bat file in C:\Aliases for each of the aliases you want
Maybe overkill, but unlike the (otherwise excellent) answer from @Argyll, this solves the problem of this loading every time.
For instance, I have a file called dig2.bat with the following in it:
@echo off
echo.
dig +noall +answer %1
Your np file would just have the following:
@echo off
echo.
notepad++.exe %1
Then just add the C:\Aliases folder to your PATH environment variable. If you have CMD or PowerShell already opened you will need to restart it.
FWIW, I have about 20 aliases (separate .bat files) in my C:\Aliases directory - I just create new ones as necessary. Maybe not the neatest, but it works fine.
UPDATE: Per an excellent suggestion from user @Mav, it's even better to use %* rather than %1, so you can pass multiple files to the command, e.g.:
@echo off
echo.
notepad++.exe %*
That way, you could do this:
np c:\temp\abc.txt c:\temp\def.txt c:\temp\ghi.txt
and it will open all 3 files.
Solution 4 - Windows
Alternatively you can use cmder
which lets you add aliases just like linux:
alias subl="C:\Program Files\Sublime Text 3\subl.exe" $*
Solution 5 - Windows
Given that you added notepad++.exe to your PATH variable, it's extra simple.
Create a file in your System32 folder called np.bat
with the following code:
@echo off
call notepad++.exe %*
The %*
passes along all arguments you give the np
command to the notepad++.exe
command.
EDIT: You will need admin access to save files to the System32 folder, which was a bit wonky for me. I just created the file somewhere else and moved it to System32 manually.
Solution 6 - Windows
Also, you can create an alias.cmd in your path (for example C:\Windows) with the command
@echo %2 %3 %4 %5 %6 > %windir%\%1.cmd
Once you do that, you can do something like this:
alias nameOfYourAlias commands to run
And after that you can type in comman line
nameOfYourAlias
this will execute
commands to run
BUT the best way for me is just adding the path of a programm.
setx PATH "%PATH%;%ProgramFiles%\Sublime Text 3" /M
And now I run sublime as
subl index.html
Solution 7 - Windows
Console Aliases in Windows 10
To define a console alias, use Doskey.exe
to create a macro, or use the AddConsoleAlias
function.
doskey
doskey test=cd \a_very_long_path\test
To also pass parameters add $*
at the end: doskey short=longname $*
AddConsoleAlias
AddConsoleAlias( TEXT("test"),
TEXT("cd \\<a_very_long_path>\\test"),
TEXT("cmd.exe"));
More information here Console Aliases, Doskey, Parameters
Solution 8 - Windows
You want to create an alias by simply typing:
c:\>alias kgs kubectl get svc
Created alias for kgs=kubectl get svc
And use the alias as follows:
c:\>kgs alfresco-svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alfresco-svc ClusterIP 10.7.249.219 <none> 80/TCP 8d
Just add the following alias.bat
file to you path. It simply creates additional batch files in the same directory as itself.
@echo off
echo.
for /f "tokens=1,* delims= " %%a in ("%*") do set ALL_BUT_FIRST=%%b
echo @echo off > C:\Development\alias-script\%1.bat
echo echo. >> C:\Development\alias-script\%1.bat
echo %ALL_BUT_FIRST% %%* >> C:\Development\alias-script\%1.bat
echo Created alias for %1=%ALL_BUT_FIRST%
An example of the batch file this created called kgs.bat
is:
@echo off
echo.
kubectl get svc %*
Solution 9 - Windows
Actually, I'll go you one better and let you in on a little technique that I've used since I used to program on an Amiga. On any new system you use, be it personal or professional, step one is to create two folders: C:\BIN
and C:\BATCH
. Then modify your path statement to put both at the start in the order C:\BATCH;C:\BIN;[rest of path]
.
Having done that, if you have little out-of-the-way utilities that you need access to simply copy them to the C:\BIN
folder and they're in your path. To temporarily override these assignments, you can add a batch file with the same name as the executable to the C:\BATCH
folder and the path will find it before the file in C:\BIN. It should cover anything you might ever need to do.
Of course, these days the canonical correct way to do this would be to create a symbolic junction to the file, but the same principle applies. There is a little extra added bonus as well. If you want to put something in the system that conflicts with something already in the path, putting it in the C:\BIN
or C:\Batch
folder will simply pre-empt the original - allowing you to override stuff either temporarily or permanently, or rename things to names you're more comfortable with - without actually altering the original.
Solution 10 - Windows
Expanding on roryhewitt answer.
An advantage to using .cmd files over DOSKEY is that these "aliases" are then available in other shells such as PowerShell or WSL (Windows subsystem for Linux).
The only gotcha with using these commands in bash is that it may take a bit more setup since you might need to do some path manipulation before calling your "alias".
eg I have vs.cmd which is my "alias" for editing a file in Visual Studio
@echo off
if [%1]==[] goto nofiles
start "" "c:\Program Files (x86)\Microsoft Visual Studio
11.0\Common7\IDE\devenv.exe" /edit %1
goto end
:nofiles
start "" "C:\Program Files (x86)\Microsoft Visual Studio
11.0\Common7\IDE\devenv.exe" "[PATH TO MY NORMAL SLN]"
:end
Which fires up VS (in this case VS2012 - but adjust to taste) using my "normal" project with no file given but when given a file will attempt to attach to a running VS opening that file "within that project" rather than starting a new instance of VS.
For using this from bash I then add an extra level of indirection since "vs Myfile" wouldn't always work
alias vs='/usr/bin/run_visual_studio.sh'
Which adjusts the paths before calling the vs.cmd
#!/bin/bash
cmd.exe /C 'c:\Windows\System32\vs.cmd' "`wslpath.sh -w -r $1`"
So this way I can just do
vs SomeFile.txt
In either a command prompt, Power Shell or bash and it opens in my running Visual Studio for editing (which just saves my poor brain from having to deal with VI commands or some such when I've just been editing in VS for hours).
Solution 11 - Windows
Naturally, I would not rest until I have the most convenient solution of all. Combining the very many answers and topics on the vast internet, here is what you can have.
- Loads automatically with every instance of
cmd
- Doesn't require keyword
DOSKEY
for aliases
example:ls=ls --color=auto $*
Note that this is largely based on Argyll's answer and comments, definitely read it to understand the concepts.
How to make it work?
- Create a
mac
macro file with the aliases
you can even use abat
/cmd
file to also run other stuff (similar to.bashrc
in linux) - Register it in Registry to run on each instance of
cmd
or run it via shortcut only if you want
Example steps:
%userprofile%/cmd/aliases.mac
;==============================================================================
;= This file is registered via registry to auto load with each instance of cmd.
;================================ general info ================================
;= https://stackoverflow.com/a/59978163/985454 - how to set it up?
;= https://gist.github.com/postcog/5c8c13f7f66330b493b8 - example doskey macrofile
;========================= loading with cmd shortcut ==========================
;= create a shortcut with the following target :
;= %comspec% /k "(doskey /macrofile=%userprofile%\cmd\aliases.mac)"
alias=subl %USERPROFILE%\cmd\aliases.mac
hosts=runas /noprofile /savecred /user:QWERTY-XPS9370\administrator "subl C:\Windows\System32\drivers\etc\hosts" > NUL
p=@echo "~~ powercfg -devicequery wake_armed ~~" && powercfg -devicequery wake_armed && @echo "~~ powercfg -requests ~~ " && powercfg -requests && @echo "~~ powercfg -waketimers ~~"p && powercfg -waketimers
ls=ls --color=auto $*
ll=ls -l --color=auto $*
la=ls -la --color=auto $*
grep=grep --color $*
~=cd %USERPROFILE%
cdr=cd C:\repos
cde=cd C:\repos\esquire
cdd=cd C:\repos\dixons
cds=cd C:\repos\stekkie
cdu=cd C:\repos\uplus
cduo=cd C:\repos\uplus\oxbridge-fe
cdus=cd C:\repos\uplus\stratus
npx=npx --no-install $*
npxi=npx $*
npr=npm run $*
now=vercel $*
;=only in bash
;=alias whereget='_whereget() { A=$1; B=$2; shift 2; eval \"$(where $B | head -$A | tail -1)\" $@; }; _whereget'
history=doskey /history
;= h [SHOW | SAVE | TSAVE ]
h=IF ".$*." == ".." (echo "usage: h [ SHOW | SAVE | TSAVE ]" && doskey/history) ELSE (IF /I "$1" == "SAVE" (doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved) ELSE (IF /I "$1" == "TSAVE" (echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved) ELSE (IF /I "$1" == "SHOW" (type %USERPROFILE%\cmd\history.log) ELSE (doskey/history))))
loghistory=doskey /history >> %USERPROFILE%\cmd\history.log
;=exit=echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved, exiting & timeout 1 & exit $*
exit=echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & exit $*
;============================= :end ============================
;= rem ******************************************************************
;= rem * EOF - Don't remove the following line. It clears out the ';'
;= rem * macro. We're using it because there is no support for comments
;= rem * in a DOSKEY macro file.
;= rem ******************************************************************
;=
Now you have three options:
-
a) load manually with shortcut > create a shortcut to
cmd.exe
with the following target :
>%comspec% /k "(doskey /macrofile=%userprofile%\cmd\aliases.mac)"
-
b) register just the
aliases.mac
macrofile -
c) register a regular
cmd/bat
file to also run arbitrary commands
see examplecmdrc.cmd
file at the bottom
note: Below, Autorun_
is just a placeholder key which will not do anything. Pick one and rename the other.
Manually edit registry at this path:
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
Autorun REG_SZ doskey /macrofile=%userprofile%\cmd\aliases.mac
Autorun_ REG_SZ %USERPROFILE%\cmd\cmdrc.cmd
Or import reg file:
%userprofile%/cmd/cmd-aliases.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="doskey /macrofile=%userprofile%\\cmd\\aliases.mac"
"Autorun_"="%USERPROFILE%\\cmd\\cmdrc.cmd"
%userprofile%/cmd/cmdrc.cmd
you don't need this file if you decided for b) above
:: This file is registered via registry to auto load with each instance of cmd.
:: https://stackoverflow.com/a/59978163/985454
@echo off
doskey /macrofile=%userprofile%\cmd\aliases.mac
:: put other commands here
Solution 12 - Windows
Very easy custom aliases:
Make a new folder anywhere on your system. Make a new file called whatever you want to name the alias with the .cmd
extention. Write all commands in the file, such as
cd /D D:\Folder
g++ -o run whatever.cpp
Copy it's the folder's path.
Go to Settings > System > About > Advanced system settings > Enviornment Variables...
Now find the Path
variable under the System variables
section. Click on it once and click Edit
. Now click New
and paste the copied text.
Click OK
, OK
and OK
. Restart your Powershell/cmd prompt and voila, you got your persistent alias! You can use the same folder to make other aliases too without needing to change Path
variable again!
Solution 13 - Windows
This solution is not an apt one, but serves purpose in some occasions.
First create a folder and add it to your system path. Go to the executable of whatever program you want to create alias for. Right click and send to Desktop( Create Shortcut). Rename the shortcut to whatever alias name is comfortable. Now, take the shortcut and place in your folder.
From run prompt you can type the shortcut name directly and you can have the program opened for you. But from command prompt, you need to append .lnk and hit enter, the program will be opened.
Solution 14 - Windows
Since you already have notepad++.exe
in your path. Create a shortcut in that folder named np
and point it to notepad++.exe
.
Solution 15 - Windows
First, you could create a file named np.cmd and put it in the folder which in PATH search list. Then, edit the np.cmd file as below:
@echo off
notepad++.exe
Solution 16 - Windows
If you'd like to enable aliases on per-directory/per-project basis, try the following:
-
First, create a batch file that will look for a file named
aliases
in the current directory and initialize aliases from it, let’s call itmake-aliases.cmd
@echo off if not exist aliases goto:eof echo [Loading aliases...] for /f "tokens=1* delims=^=" %%i in (aliases) do ( echo %%i ^<^=^> %%j doskey %%i=%%j ) doskey aliases=doskey /macros echo -------------------- echo aliases ^=^> list all echo alt+F10 ^=^> clear all echo [Done] ```
-
Then, create
aliases
wherever you need them using the following format:
alias1 = command1 alias2 = command2 ... ```
for example:
```
b = nmake c = nmake clean r = nmake rebuild ```
-
Then, add the location of
make-aliases.cmd
to your%PATH%
variable to make it system-wide or just keep it in a known place. -
Make it start automatically with
cmd
.-
I would definitely advise against using
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
for this, because some development tools would trigger the autorun script multiple times per session. -
If you use ConEmu you could go another way and start the script from the startup task (
Settings
>Startup
>Tasks
), for example, I created an entry called{MSVC}
:cmd.exe /k "vcvars64 && make-aliases"
,and then registered it in Explorer context menu via
Settings
>Integration>
withCommand:
{MSVC} -cur_console:n
, so that now I can right-click a folder and launch a VS developer prompt inside it with myaliases
loaded automatically, if they happen to be in that folder.Without ConEmu, you may just want to create a shortcut to
cmd.exe
with the corresponding command or simply runmake-aliases
manually every time.
-
Should you happen to forget your aliases, use the aliases
macro, and if anything goes wrong, just reset the current session by pressing Alt+F10, which is a built-in command in cmd
.
Solution 17 - Windows
As doskey does not work for powershell or winodows 10 terminal app I am sharing this solution.
Demo to create an alias in windows 10. Alias to be expected with input parameters:
com=D:\website_development\laragon\bin\php\php-8.1.2-Win32-vs16-x64/php8 D:\website_development\laragon\bin\composer/composer.phar
Procedure:
- create a folder named scripts in c drive
- inside scripts folder create com.bat
- open com.bat file
- Example for running composer command with specific php version:
@echo off
set path=D:\website_development\laragon\bin\php\php-8.1.2-Win32-vs16-x64/php8 D:\website_development\laragon\bin\composer/composer.phar
set args=%*
set command=%path% %args%
%command%
- save it
- click start
- search for edit environment variable
- click advance
- add scripts directory to the path
Now you can run com as alias.
Note: If you want to add new alias just create a new bat file.
Solution 18 - Windows
Using doskey is the right way to do this, but it resets when the Command Prompt window is closed. You need to add that line to something like .bashrc equivalent. So I did the following:
- Add "C:\Program Files (x86)\Notepad++" to system path variable
- Make a copy of notepad++.exe (in the same folder, of course) and rename it to np.exe
Works just fine!