Пакетный файл не возвращает правильное значение после использования bat в exe

Пакетный файл не возвращает правильное значение после использования bat в exe

У меня много проблем с этим скриптом. Он должен читать файл (который указывает пользователь), а затем сохранять его в 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команды, действительны только в рамках процесса, в котором они определены. Это легко доказать с помощью эксперимента:

  1. Откройте одну командную строку и попробуйте определить set a = b. Используйте set, чтобы проверить, что она правильно определена.
  2. Теперь откройте вторую командную строку и вызовите set. Вы видите, что это aне определено в этой области.

storvar.exeэто отдельный процесс. Следовательно, у него есть своя область действия. Какую бы переменную окружения вы в нем ни определили, она там и останется и будет удалена при выходе.

Так есть ли альтернатива?Ну да. Я сам использую PowerShell вместо устаревших пакетных файлов; он может извлекать данные из файла и либо использовать их сразу, либо передавать в следующий скрипт. (Microsoft официально поддерживает компиляцию PowerShell в EXE, хотя в галерее TechNet можно найти и ориентированные на новичков.) AutoIt — еще одна альтернатива.

Связанный контент