Пытаясь избежать двойной кавычки рядом с запятой в PowerShell, обычный метод не работает.

Я заменяю текст с помощью PowerShell, работающего в пакетном файле, используя одинарные кавычки для заключения заменяемого текста.

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

Символ сам по себе экранируется с помощью","

Символ сам по себе экранируется с помощью""""

Вышеупомянутое работает, если и не находятся рядом друг с другом, но если они находятся вот так...

      ",

Использование этого для экранирования обоих символов не работает:

      '""""","'

Это четыре двойные кавычки, чтобы избежать"персонаж, затем еще два, чтобы избежать,символ, заключенный в одинарные кавычки.

Пожалуйста, не предлагайте использовать PowerShell отдельно, я хочу оставить все как есть, запускать из командного файла.

Все остальное работает отлично, вот и все",проблема.

Ваше здоровье.

2 ответа

В Powershell вы можете использовать строки двумя способами.

"...."и'....'.

Когда вы используете первый, второй символ кавычки не обязательно экранировать. Если вы используете второй, первый символ кавычки не нужно экранировать. Например:"This is a 'test'"и'This is a "test" too.'

Кроме того,'...'это буквальный текст, поэтому'$test'буквально распечатаю$testтогда как"$test"напечатает все, что находится в переменной $test.

Экранирование строки можно выполнить несколькими способами:\"это такой способ."This is a test $('"') too"Другой.

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

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

Хорошо, я разобрался с этим, нужно удалить последнюю двойную кавычку, что кажется мне странным, потому что нарушает правила экранирования специальных символов, но это то, что работает. Возможно, это потому, что я запускаю PowerShell в пакетном файле (где обратная галочка бесполезна, хотя я использую PowerShell).

      '"""",'

Это также работает, когда после запятой снова есть символы.

Например, для этого подойдет приведенное выше:

      some text", then some more text

Меняем это на это:

      some text then some more text
Другие вопросы по тегам