O arquivo em lote não retorna o valor correto após o uso do bat to exe

1

Estou tendo muitos problemas com esse script. Ele deve ler o arquivo a (que o usuário especifica) e depois salvá-lo na variável de ambiente storeresult .

Estou usando um conversor BAT To EXE que não afeta nenhum comando em lote, então não é isso. (Só se você está se perguntando por que eu estou chamando storvar em 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 com chamadas):

storevar Hi hi
pause
echo %storeresult%
pause

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

    
por ZeekPlayz 10.06.2018 / 06:30

1 resposta

0

Quando você tenta definir e usar uma variável, você deve sempre estar atento ao seu escopo .

Variáveis de ambiente que você define usando o comando set são válidas somente dentro do escopo do processo no qual elas estão definidas. É fácil provar com um experimento:

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

storvar.exe é um processo separado. Por isso, tem seu próprio escopo. Seja qual for a variável de ambiente que você definir, ela permanecerá ali 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 material do arquivo e usá-lo imediatamente ou emiti-lo para o próximo script. (A Microsoft oficialmente suporta a compilação do PowerShell para EXE, embora você também possa encontrar os orientados para iniciantes na Galeria do TechNet.) AutoIt é outra alternativa.

    
por 10.06.2018 / 11:44