如果从Perl脚本调用,则不设置Windows环境变量

时间:2015-12-07 21:11:33

标签: perl batch-file

我有一个批处理脚本setEnv.bat,可以将TEST_ENV等环境变量设置为true

我从Perl脚本中调用此批处理脚本,如:

my $batch_cmd = "setEnv.bat";
system( $batch_cmd );

我从命令行运行Perl脚本。 setEnv.bat设置环境变量。 Perl脚本完成后,如果我set TEST输出为:

  

未定义环境变量TEST。

这意味着当批处理脚本终止并在Perl脚本中继续执行时,环境变量将丢失。

如何解决这个问题?

2 个答案:

答案 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