Doskey for compound command
Doskey works in modern versions of Windows for setting aliases for single commands, e.g. doskey foo=bar
.
There's a slight problem trying to use it for compound commands like doskey foo=bar & baz
since this gets interpreted as (doskey foo=bar) & baz
. The obvious fix would be to add explicit parentheses, doskey foo=(bar & baz)
but for some reason this doesn't work, and doskey foo="bar & baz"
doesn't work either.
Is there any way of doing this?
Solution 1:
Escape the ampersand.
foo=bar ^& baz
Solution 2:
Use $T
to separate commands:
doskey foo=bar $T baz
doskey cpdel=copy $1 $2 $T del $1
from doskey /?
:
$T Command separator. Allows multiple commands in a macro.
Solution 3:
to add to the previous answers, you can also do this:
mybatfile.cmd
doskey /macrofile=aliases.txt
aliases.txt
foo=bar & baz cpdel=copy $1 $2 $T del $1 cc=echo|set /p=$*|clip
note that in the macrofile, there is no need to escape pipe/ampersand and you can define multiple aliases in one call.
Solution 4:
To (somewhat) add on to Dennis Williamson's answer, you can also escape the pipe character in order to pipe commands! For example, I wanted a command that copies stuff to the clipboard. Due to the way COPY
will interpret it, you need to do a goofy looking command for it to actually copy the text you specify without it being followed by a newline.
In order to define a macro for copying to the clipboard, you can escape the pipe with ^
:
doskey cc=echo^|set /p=$*^|clip
Upon execution of the command cc hey
, you will now have hey
copied to the clipboard!