Я провожу весь день в поисках решения, но безуспешно. У меня странная ошибка с 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