Как безопасно отобразить значение переменной внутри условия if, пропуская окружающие двойные кавычки? - PullRequest
2 голосов
/ 26 октября 2011

Запуск

@echo off
setlocal enabledelayedexpansion 
set x=some value with unsafe (^&^<^>()") characters inside
if 1 == 1 (
  echo "value of x (!x!) is interesting"
)

дает

"value of x (some value with unsafe (&<>()") characters inside) is interesting"

Мне пришлось поместить отображаемое значение в двойные кавычки, чтобы избежать ошибки синтаксического анализа.Однако я не хочу, чтобы эти двойные кавычки печатались.Есть ли какой-нибудь способ временно (только для безопасной передачи его в команду echo) распечатать значение кавычки?

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Ответ такой же, как и в вашем вопросе
Как экранировать переменные с круглыми скобками в условии if в пакетном файле?

@echo off
setlocal enabledelayedexpansion 
set x=some value with unsafe (^&^<^>()") characters inside
if 1 == 1 (
  set "output=value of x (!x!) is interesting"
  echo !output!
)
2 голосов
/ 26 октября 2011

Извините, я думаю, здесь есть небольшая путаница.

Если вы хотите напечатать любой специальный символ с помощью команды echo, просто удалите его. Период. Ваша проблема не имеет отношения к отложенному расширению. Например, этот код:

@echo off
if 1 == 1 (
  echo value of x (anything) is interesting
)

помечают ошибку, потому что круглые скобки в команде echo мешают открытому if. Чтобы решить эту проблему, просто избегайте скобок, как сказал Веберик:

@echo off
if 1 == 1 (
  echo value of x ^(anything^) is interesting
)

Расширение с отложенной переменной никогда не вызывает ошибку, не имеет значения внутри переменной.

2 голосов
/ 26 октября 2011

Вы можете добавить кавычки в переменную и попробовать подстановку строки в тот момент, когда вы ее отобразите.например:

echo %x:"=%

, но в вашем случае я не думаю, что это сработает.чтобы ваш пример работал, просто уберите скобки:

echo value of x ^(!x!^) is interesting

к сожалению, нет 100% ответа на этот вопрос.1009 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...