Доски для составной команды

32

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

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

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

rwallace
источник

Ответы:

39

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

foo=bar ^& baz
Приостановлено до дальнейшего уведомления.
источник
19

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

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

от doskey /?:

$ T Командный разделитель. Позволяет несколько команд в макросе.
Джон Т
источник
7

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

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

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

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

CoolOppo
источник
Мне также было интересно, как предотвратить копирование символа новой строки! Спасибо.
Алекс Вальехо
7

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

mybatfile.cmd

    doskey /macrofile=aliases.txt

aliases.txt

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

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

spiritpyre
источник