Экранирование специальных символов внутри bat-файла не будет действовать одинаковоC#

Место общения программистов C#
Anonymous
Экранирование специальных символов внутри bat-файла не будет действовать одинаково

Сообщение Anonymous »

Я провожу весь день в поисках решения, но безуспешно. У меня странная ошибка с bat-файлом, созданным для распаковки файлов 7zip. Вот файл .bat:

Код: Выделить всё

@echo off
setlocal enabledelayedexpansion

set "filename=%~2"
set "password=%~1"
echo Password after removing quotes is: !password!
echo Path: !filename!
"C:\Program Files\7-zip\7z.exe" x -y -o"C:\Users\XXXXXX\Downloads" !filename! -p!password!
Насколько я знаю, вам нужно экранировать специальные символы внутри файлов .bat с помощью «^». У меня есть еще один скрипт C#, который делает это перед передачей строкового пароля в файл .bat. Он выглядит так:

Код: Выделить всё

static string EscapeSpecialCharacters(string input)
{
string pattern = @"[!&^]";
string escapeString = System.Text.RegulareExpressions.Regex.Replace(input, pattern, m=>m.Value == "&"?"^"+m.Value:"^^^"+m.Value);
return escapeString;
}

string escapedString = EscapeSpecialCharacters(originalString);
out_originalString = escapedString;
Моя проблема возникает, когда пароль содержит символ «^». Например, пароль ABCDoE4vySI^K?Mwt!w^ приведет к ABCDoE4vySI^^^^K?Mwt^^^!w^^^^, и пароль будет иметь эту форму внутри bat-файла ABCDoE4vySI^K?Mwt! ^ все хорошо. Для другой строки, выглядящей так szEcal^q#Lc@JkYjAWda, строка примет форму szEcal^^^^q#Lc@JkYjAWda, но когда она попадет в файл .bat, она будет иметь форму szEcal^^q#Lc@ JkYjAWda, что приведет к ошибке, и я не могу понять почему, это должно быть так: szEcal^q#Lc@JkYjAWda. Почему в одном и том же случае действуют двумя способами вместо того, чтобы соблюдать одно и то же условие и действовать одинаково.

Подробнее здесь: https://stackoverflow.com/questions/787 ... t-the-same

Вернуться в «C#»