Arquivo em lote não retornando o valor correto após usar bat para exe

Arquivo em lote não retornando o valor correto após usar bat para exe

Estou tendo muitos problemas com este script. Ele deve ler o arquivo (especificado pelo usuário) e salvá-lo na storeresultvariável de ambiente.

Estou usando um conversor BAT para EXE que não afeta nenhum comando em lote, então não é isso. (Só se você está se perguntando por que estou ligando storvarem vez de storvar.bat)

O script principal ( storvar.exe):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

O script que estou usando para chamar o script (sem erros na chamada):

storevar Hi hi
pause
echo %storeresult%
pause

Quando eu chamo, ele apenas retorna o resultado ( %storeresult%) como nada, não consigo encontrar o problema!

Responder1

Ao tentar definir e usar uma variável, você deve estar sempre atento ao seuescopo.

As variáveis ​​de ambiente que você define usando seto comando são válidas apenas dentro do escopo do processo no qual são definidas. É fácil provar com um experimento:

  1. Abra um prompt de comando e tente definir o arquivo set a = b. Use setpara verificar se está definido corretamente.
  2. Agora, abra um segundo prompt de comando e invoque o set. Você vê que anão está definido neste escopo.

storvar.exeé um processo separado. Portanto, tem seu próprio escopo. Qualquer variável de ambiente que você definir permanecerá lá e será excluída quando sair.

Então, existe uma alternativa?Bem, sim. Eu mesmo uso o PowerShell em vez dos arquivos em lote obsoletos; ele pode extrair coisas do arquivo e usá-las imediatamente ou enviá-las para o próximo script. (A Microsoft suporta oficialmente a compilação do PowerShell para EXE, embora você também possa encontrar aqueles voltados para novatos na Galeria TechNet.) AutoIt é outra alternativa.

informação relacionada