30

Doskey работает в современных версиях Windows для установки псевдонимов для отдельных команд, например, doskey foo=bar .

Есть небольшая проблема, пытаясь использовать его для составных команд, таких как doskey foo=bar & baz поскольку это интерпретируется как (doskey foo=bar) & baz . Очевидным решением будет добавить явные скобки, doskey foo=(bar & baz) но по какой-то причине это не работает, и doskey foo="bar & baz" тоже не работает.

Есть ли способ сделать это?

4 ответа4

37

Побег из амперсанда.

foo=bar ^& baz
18

Используйте $T для разделения команд:

doskey foo=bar $T baz
doskey cpdel=copy $1 $2 $T del $1

от doskey /?:

$T     Command separator.  Allows multiple commands in a macro.
7

Чтобы добавить к предыдущим ответам, вы также можете сделать это:

mybatfile.cmd

    doskey /macrofile=aliases.txt

aliases.txt

    foo=bar & baz
    cpdel=copy $1 $2 $T del $1
    cc=echo|set /p=$*|clip

обратите внимание, что в макрофиле нет необходимости экранировать трубу / амперсанд, и вы можете определить несколько псевдонимов за один вызов.

7

Чтобы (в некоторой степени) добавить ответ Денниса Уильямсона, вы также можете экранировать символ канала, чтобы передавать команды! Например, я хотел команду, которая копирует вещи в буфер обмена. Из-за того, как COPY будет интерпретировать его, вам нужно сделать глупую команду, чтобы он фактически копировал указанный вами текст, без последующего перевода строки.

Чтобы определить макрос для копирования в буфер обмена, вы можете выйти из канала с помощью ^:

doskey cc=echo^|set /p=$*^|clip

После выполнения команды cc hey вы теперь hey скопирована в буфер обмена!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .