我有一个批处理脚本setEnv.bat
,可以将TEST_ENV
等环境变量设置为true
。
我从Perl脚本中调用此批处理脚本,如:
my $batch_cmd = "setEnv.bat";
system( $batch_cmd );
我从命令行运行Perl脚本。 setEnv.bat
设置环境变量。 Perl脚本完成后,如果我set TEST
输出为:
未定义环境变量TEST。
这意味着当批处理脚本终止并在Perl脚本中继续执行时,环境变量将丢失。
如何解决这个问题?
答案 0 :(得分:1)
问题是系统命令将在shell中执行第一个命令,在另一个shell中执行第二个命令,依此类推。 这意味着每个shell都有自己的环境,不会“看到”其他shell的环境变量。
如果您只想要一个快速而肮脏的解决方案,您可以尝试将命令与&&组合,像:
system('setEnv.bat && doSomething.bat');
这不是理想的,但是如果你不想花太多时间在它上面,它应该可以工作(顺便说一下,&&&& and Windows和Unix)。
答案 1 :(得分:0)
尝试在Perl脚本中使用下面的Windows Perl模块来设置Windows环境变量:
Win32::AdminMisc::SetEnvVar
示例代码:
use Win32::AdminMisc;
$name="Temp";
$val="C:/tmp";
SetEnvVar($name,$val);
这会将环境变量$ name设置为$ val,如果不存在则创建$ name。 新值将全局设置。 有关详细信息,请参阅SetEnvVar()上的文档。 “Win32 Perl脚本:管理员手册”一书也引用了SetEnvVar()。
HTH