Você está perdendo o :
após o nome da variável. Então seus comandos seriam:
set /p out=<{full path to the file}\Temp_result.txt
set SECURETOKEN=%out:~21,25%
set SECURETOKENID=%out:~61,16%
Eu tenho um arquivo em lote que cria um arquivo de texto com sua saída, como segue:
RESULT=0&SECURETOKEN=SmH3kciXiVkiwD0i70CwKYgAR&SECURETOKENID=2013031414280240&RESPMSG=Approved
O comprimento das variáveis é constante, então é fácil analisar o valor da string. Delimits para todos os pares de nome e valor são "e" comercial.
Então, de dentro do primeiro arquivo de lote, preciso chamar outro arquivo de lote e usar dois valores de variável do conteúdo do arquivo de texto:
SECURETOKEN
e
SECURETOKENID
Usar a parte seguinte no segundo lote não ajuda, onde Temp_result.txt é o arquivo que contém a saída.
set /p out=<{full path to the file}\Temp_result.txt
set SECURETOKEN=%out~21,25%
set SECURETOKENID=%out~61,16%
Alguém pode me ajudar, por favor?
Você está perdendo o :
após o nome da variável. Então seus comandos seriam:
set /p out=<{full path to the file}\Temp_result.txt
set SECURETOKEN=%out:~21,25%
set SECURETOKENID=%out:~61,16%
Parece que você tem uma solução perfeitamente boa com a resposta user1936123. Aqui está uma abordagem completamente diferente que funcionará mesmo que os comprimentos dos valores não sejam constantes.
@echo off
setlocal
for /f "usebackq tokens=2,3 delims=&" %%A in ("{fullFilePath}\Temp_result.txt") do (
set "%%A"
set "%%B"
)
Se você estiver disposto a definir uma variável para todos os pares de valores de nome, não apenas o segundo e o terceiro, então:
set /p "ln=" <"{fullFilePath}\Temp_result.txt"
set "%ln:&="&set "%"
Não é óbvio como isso funciona. Ele usa search and replace para transformar a linha na seguinte série de instruções SET, que são então executadas:
set "RESULT=0"&set "SECURETOKEN=SmH3kciXiVkiwD0i70CwKYgAR"&set "SECURETOKENID=2013031414280240"&set "RESPMSG=Approved"
Tags batch-file