14

Following on from an answer to this question

For the Windows command prompt I can define aliases as follows:

@echo off
DOSKEY ns=npm start
DOSKEY nsr=npm run serve

I want to define an alias that will combine these two commands. I tried the following:

@echo off
DOSKEY nss=npm start && npm run serve

When I try to open the command prompt the window will open but the > prompt does not appear.

I think that the inclusion of && is causing a problem.

gburnett
  • 755
  • 8
  • 18

4 Answers4

28

The command separator for DOSKEY is $T

For your example:

DOSKEY nss=npm start $T npm run serve
AyrA
  • 763
  • 10
  • 17
  • Thanks for answering. I tried this and the `>` prompt would appear. I encountered a different problem after that. If the first command failed for some reason then the second command would still execute. I opted for a different approach which I will post. – gburnett Nov 28 '17 at 09:43
  • 4
    Add another `$T` to form `&&`, and this will be the best answer. – Eryk Sun Nov 29 '17 at 11:48
  • `DOSKEY nss=npm start $T$T npm run serve` - works perfectly! From microsoft docs using $T is preferred method. [doskeys via Microsoft](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/doskey#remarks) – Jenobi Apr 25 '22 at 19:09
18

I looked at an answer to a question on superuser. The following approach resolved my problem:

@echo off
DOSKEY nss=npm start ^&^& npm run serve
gburnett
  • 755
  • 8
  • 18
  • 4
    I hope you realize that this is just a substitution rule in the console via [`AddConsoleAlias`](https://learn.microsoft.com/en-us/windows/console/addconsolealias). It does the substitution in the input buffer, before a console client program (e.g. cmd.exe) even reads a line of input. These aliases only work at the start of a line entered in the console (i.e. you can't pipe to them) and not in batch scripts. For doskey.exe, you can use `$T$T` in place of `&&`, which is more flexible then using `^` to escape the `&` operator in the command line. – Eryk Sun Nov 28 '17 at 16:22
  • Thanks for the information. I'm not aware of any need to pipe to these commands at the moment. – gburnett Nov 29 '17 at 08:29
4

My approach is to load the macros from a text file:

a.bat:
    @doskey /macrofile=C:\%HOMEPATH%\bin\aliases.txt

and in the macro file, && works:

aliases.txt:
    cl=cd /d $* && dir

Then if I type "cl bin" from HOMEPATH, it does "cd /d bin" and then "dir":

C:\Users\mike> cl bin
09/17/2020  09:27 AM             1,303 a.bat
09/30/2020  03:17 PM               886 aliases.txt
mike scholtes
  • 173
  • 2
  • 9
2

Try writing it as a batch file and then calling the batch file use the DOSKEY command

REM do_npm.bat
npm start
npm run serve

Then, run the DOSKEY command

DOSKEY npm=do_npm.bat

See if that works for you

Marcello B.
  • 4,177
  • 11
  • 45
  • 65
  • Thanks for answering. I've opted for a different approach though as I want to avoid additional files. – gburnett Nov 28 '17 at 09:44