
У меня много проблем с этим скриптом. Он должен читать файл (который указывает пользователь), а затем сохранять его в storeresult
переменной окружения.
Я использую конвертер BAT в EXE, который не влияет ни на какие пакетные команды, так что дело не в этом. (Просто если вам интересно, почему я вызываю storvar
вместо storvar.bat
)
Основной сценарий ( storvar.exe
):
set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause
Скрипт, который я использую для вызова скрипта (ошибок при вызове нет):
storevar Hi hi
pause
echo %storeresult%
pause
Когда я вызываю его, он просто возвращает результат ( %storeresult%
), как ничто, я не могу найти проблему!
решение1
Когда вы пытаетесь определить и использовать переменную, вы всегда должны помнить о ееобъем.
Переменные окружения, которые вы определяете с помощью set
команды, действительны только в рамках процесса, в котором они определены. Это легко доказать с помощью эксперимента:
- Откройте одну командную строку и попробуйте определить
set a = b
. Используйтеset
, чтобы проверить, что она правильно определена. - Теперь откройте вторую командную строку и вызовите
set
. Вы видите, что этоa
не определено в этой области.
storvar.exe
это отдельный процесс. Следовательно, у него есть своя область действия. Какую бы переменную окружения вы в нем ни определили, она там и останется и будет удалена при выходе.
Так есть ли альтернатива?Ну да. Я сам использую PowerShell вместо устаревших пакетных файлов; он может извлекать данные из файла и либо использовать их сразу, либо передавать в следующий скрипт. (Microsoft официально поддерживает компиляцию PowerShell в EXE, хотя в галерее TechNet можно найти и ориентированные на новичков.) AutoIt — еще одна альтернатива.