Не может использовать строку base64 из файла для переменной в пакете - PullRequest
0 голосов
/ 29 марта 2019

У меня проблема с анализом строки base64 из текстового файла в пакетную переменную

У меня есть скрипт, который генерирует конфигурацию для приложения в XML, используя пакет, у меня есть XML, генерирующий нормально. Проблема в том, что в XML, который я генерирую, есть некоторый base64, который кодирует больше XML с переменными, которые мне нужно изменить. Головная боль с половиной. (Соответствующее приложение требует этого или оно нарушает конфигурацию)

У меня есть XML, который нужно кодировать в строку base64 в текстовом файле, но мне нужно загрузить этот текстовый файл в переменную, но я думаю, что строка разбивает переменную.

Base64, который он сгенерировал, таков:

PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8QXJyYXlPZlN5c3RlbVZhcmlhYmxlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KPFN5c3RlbVZhcmlhYmxlPg0KPElEPiVVU0VSTkFNRSU8L0lEPg0KPFZhbHVlPmxlZ2FsaXQ8L1ZhbHVlPg0KPFJlYWRPbmx5PnRydWU8L1JlYWRPbmx5Pg0KPFR5cGU+U3RyaW5nPC9UeXBlPg0KPC9TeXN0ZW1WYXJpYWJsZT4NCjxTeXN0ZW1WYXJpYWJsZT4NCjxJRD4lTE9HT05fVVNFUk5BTUUlPC9JRD4NCjxSZWFkT25seT50cnVlPC9SZWFkT25seT4NCjxWYWx1ZT5sZWdhbGl0PC9WYWx1ZT4NCjxUeXBlPlN0cmluZzwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8U3lzdGVtVmFyaWFibGU+DQo8SUQ+JVNFX0xPQ0FMX1RFTVAlPC9JRD4NCjxWYWx1ZT5DOlxVc2Vyc1xsZWdhbGl0XEFwcERhdGFcTG9jYWxcVGVtcFwyXDwvVmFsdWU+DQo8UmVhZE9ubHk+dHJ1ZTwvUmVhZE9ubHk+DQo8VHlwZT5QYXRoPC9UeXBlPg0KPC9TeXN0ZW1WYXJpYWJsZT4NCjxTeXN0ZW1WYXJpYWJsZT4NCjxJRD4lU0VfTE9DQUxfRElDVF9ST09UJTwvSUQ+DQo8VmFsdWU+QzpcVXNlcnNcbGVnYWxpdFxEb2N1bWVudHNcU3BlZWNoRXhlY1w8L1ZhbHVlPg0KPFJlYWRPbmx5PnRydWU8L1JlYWRPbmx5Pg0KPFR5cGU+UGF0aDwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8U3lzdGVtVmFyaWFibGU+DQo8SUQ+JVNFX0NFTlRSQUxfRElDVF9ST09UJTwvSUQ+DQo8VmFsdWU+XFxMSVQtU0VSVkVSXFBoaWxpcHNfU0VfRW50ZXJwcmlzZVxDZW50cmFsX0RpY3RhdGlvbjwvVmFsdWU+DQo8UmVhZE9ubHk+ZmFsc2U8L1JlYWRPbmx5Pg0KPFR5cGU+UGF0aDwvVHlwZT4NCjwvU3lzdGVtVmFyaWFibGU+DQo8L0FycmF5T2ZTeXN0ZW1WYXJpYWJsZT4NCg==
for /f "tokens=*" %%c in (%~dp0\base.txt) do (
set base=%%c
)
echo %base%

Я использую вышеприведенный цикл for для загрузки файла в переменную, но при выводе эхосигнала я не получаю никакого вывода, так как кажется, что переменная по какой-то причине не установлена. Другие текстовые файлы, которые я загрузил в переменную с помощью этого метода, работают.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Основной проблемой, с которой я столкнулся, был файл, который я пытался загрузить, поскольку переменная была закодирована в спецификации UCS-2 LE. Я должен был убедиться, что файл был закодирован в UTF 8 без спецификации, и все работало как требуется.

Спасибо всем, кто помог понять это.

0 голосов
/ 29 марта 2019

TL; DR -

Это система, предшествующая WinXp?

Детали:

Это длинный base64, или ты рад меня видеть? : -)

Сначала я задумался о длине линии. Но любой WinXp + будет обрабатывать 8 тыс. Символов, поэтому 7,664 в вашем примере не должно быть проблемой.

Так что я подумал о знаках плюса и обратной косой черте за пределами двойных кавычек. Тем не менее, отсутствие dbl-кавычек не было проблемой в моем тестировании. Это работало просто отлично:

--CMD:--
for /f %A in (c:\temp\z.txt) do @set zLongTmp=%A
--OUTPUT:--
...a 7,664 char output...

Итак, я проверил строку и нашел только [A-Z0-9 + /] .... так что ничего необычного

Я провел другие тесты, но все прошло успешно. Мне интересно, если это система до WinXp, у которой максимальная длина командной строки составляет 2047 символов. И если это не так, я бы посоветовал использовать двойные кавычки вокруг команды 'set'.

Пример:

for /f %A in (c:\temp\z.txt) do @set "zLongTmp=%A"
echo %A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...