2016-06-29 2 views
0

В StackOverflow есть много вопросов о том, как избежать заданного символа в cmd.exe. Однако, похоже, ни одно из решений не работает в моем случае.

В принципе, я хочу установить переменную окружения FOO в a!$5.

Я попытался очевидное:

set FOO=a!$5 

Что дает:

History expansion: set FOO=ae5 

Справедливо, я думаю, я должен бежать ! или $, или обоих. Однако ничего не работает.

я могу сделать:

echo a^! 
a! 

И:

echo a$ 
a$ 

И даже:

echo a^$ 
a$ 

Но:

echo a^!$ 
History expansion: echo a^a^$ 
aa$ 

Я нахожусь в убытке, выясняя, что делать здесь. Кажется, как бы я ни избегал специальных символов, я не могу получить результат, который я хочу.

Как я могу это сделать?

+0

не удалось воспроизвести. – Stephan

+0

Знак '$' ничего особенного для 'cmd', поэтому нет причин его избегать; знак '!' имеет особое значение, если включено [delayed expansion] (http://ss64.com/nt/delayedexpansion.html). – aschipfl

ответ

0

Побег каждого персонажа с ^: echo a^!^$5

a!$5

0

не ответ, но когда я типа множество FOO = а $ 5, что это именно то, что я получаю!. Я думал, что это может потребовать предшественника

SETLOCAL EnableDelayedExpansion

, но он работал, не делая, что (возможно, это мой по умолчанию?) К сожалению, я не мог!

+0

Это интересно. Теперь я уверен, что это связано с [Clink] (https://mridgers.github.io/clink/), который у меня установлен на моем компьютере. – ereOn

+1

Когда вы включаете замедленное расширение, буквальные восклицательные знаки '!' Будут потеряны (или вызывают некоторые другие неожиданные бахавиуры)! – aschipfl

+0

Полезно знать ... спасибо – Dave

1

Это, по-видимому, ошибка в Clink, которую я установил на своих компьютерах.

Я закончил вверх делает скучный, но работает:

set FOO=a! 
set FOO=%FOO%$5 

, который работает отлично. Грустно, но, по крайней мере, это работает для всех.

Смежные вопросы