1

У меня много проблем с этим скриптом. Он должен прочитать файл (указанный пользователем), а затем сохранить его в переменной среды storeresult .

Я использую BAT To 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 ответ1

0

Когда вы пытаетесь определить и использовать переменную, вы всегда должны помнить о ее области действия.

Переменные среды, которые вы определяете с помощью команды set , действительны только в рамках процесса, в котором они определены. Это легко доказать с помощью эксперимента:

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .