Проблема не в вашем коде, а в выполнении процесса. Полные системные переменные присваиваются процессу, который выполняется. Итак, ваш дочерний процесс также имел такой же набор переменных.
Ваш пример кода работает хорошо. Добавляет переменную в среду SYSTEM.
Итак, вам нужно установить переменную не только для вашей системы, но и для вашего процесса.
Вот код.
var oShell = WScript.CreateObject("WScript.Shell");
var oSysEnv = oShell.Environment("SYSTEM");
oSysEnv("TEST1") = "TEST_VALUE";
var oSysEnv = oShell.Environment("PROCESS");
oSysEnv("TEST1") = "TEST_VALUE";
oExec = oShell.Run("envtest.bat", 1, true);
Как только вы создали системную переменную.
Он назначит вновь созданную переменную для текущего процесса. Таким образом, ваш дочерний процесс может получить эту переменную во время выполнения команды «SET».
Извините за мой плохой английский.