2

У меня есть пакетный файл, который создает текстовый файл с выводом, как показано ниже:

RESULT=0&SECURETOKEN=SmH3kciXiVkiwD0i70CwKYgAR&SECURETOKENID=2013031414280240&RESPMSG=Approved

Длина переменных постоянна, поэтому легко разобрать значение из строки. Разделителями для всех пар имя-значение являются амперсанды.

Затем из первого пакетного файла мне нужно вызвать другой пакетный файл и использовать два значения переменных из содержимого текстового файла:

SECURETOKEN

а также

SECURETOKENID

Использование следующей части во втором пакете не помогает, где Temp_result.txt - это файл, содержащий выходные данные.

set /p out=<{full path to the file}\Temp_result.txt
set SECURETOKEN=%out~21,25%
set SECURETOKENID=%out~61,16%

Кто-нибудь может мне помочь, пожалуйста?

2 ответа2

2

Вам не хватает : после имени вашей переменной. Таким образом, ваши команды будут:

set /p out=<{full path to the file}\Temp_result.txt
set SECURETOKEN=%out:~21,25%
set SECURETOKENID=%out:~61,16%
2

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

@echo off
setlocal
for /f "usebackq tokens=2,3 delims=&" %%A in ("{fullFilePath}\Temp_result.txt") do (
  set "%%A"
  set "%%B"
)

Если вы хотите установить переменную для всех пар имя-значение, а не только для 2-й и 3-й пар, то:

set /p "ln=" <"{fullFilePath}\Temp_result.txt"
set "%ln:&="&set "%"

Не очевидно, как работает выше. Он использует поиск и замену для преобразования строки в следующую серию операторов SET, которые затем выполняются:

set "RESULT=0"&set "SECURETOKEN=SmH3kciXiVkiwD0i70CwKYgAR"&set "SECURETOKENID=2013031414280240"&set "RESPMSG=Approved"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .