
Estou tendo muitos problemas com este script. Ele deve ler o arquivo (especificado pelo usuário) e salvá-lo na storeresult
variá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 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 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 set
o comando são válidas apenas dentro do escopo do processo no qual são definidas. É fácil provar com um experimento:
- Abra um prompt de comando e tente definir o arquivo
set a = b
. Useset
para verificar se está definido corretamente. - Agora, abra um segundo prompt de comando e invoque o
set
. Você vê quea
nã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.