访问Perl脚本中的批处理环境变量

时间:2017-10-06 12:12:53

标签: perl batch-file jenkins

我正在尝试使用Perl脚本将Jenkins工件发送到共享驱动器后期构建活动,但是从下面的代码中,%versionName%值已经被设置为批处理脚本中的环境变量。

我不知道如何将环境变量传递给Perl脚本。我收到了输出Motiv_Android__V_%versionName%,但我期待Motiv_Android__V_1.X.X.X%versionName%的值为1.X.X.X

use warnings;

use File::Copy;
use File::Copy::Recursive qw (dircopy);


my $source_dir   = 'C:\test';
my $target_dir   = 'Z:\main\term\ban\test';
my $artifact_dir = 'C:\Users\lavana\Projects\MyApplication\';

my ( %versionName ) = @ARGV;

$Artifact_name = "Motiv_Android_\_V\_%versionName%";

print "artifact $Artifact_name\n";

mkdir $Artifact_name;

opendir( my $DIR, $source_dir ) || die "can't opendir $source_dir: $!"; 

my @files = readdir( $DIR );

foreach my $t ( sort grep( /^.*\.apk$/, @files ) ) {

    if ( "$source_dir/$t" ) {
        copy "$source_dir/$t", "./$Artifact_name/$t"
        dircopy("$artifact_dir/$Artifact_name","$target_dir/$Artifact_name");
    }
}

closedir($DIR);

3 个答案:

答案 0 :(得分:-1)

通过%ENV哈希访问环境。

替换

$Artifact_name = "Motiv_Android_\_V\_%versionName%";

$Artifact_name = "Motiv_Android_\_V\_$ENV{versionName}";

$Artifact_name = "Motiv_Android_\_V\_" . $ENV{versionName};

请注意,这些斜杠是无用的,因此您可以使用

$Artifact_name = "Motiv_Android__V_" . $ENV{versionName};

答案 1 :(得分:-2)

答案 2 :(得分:-2)

要获取perl中的环境变量,您应该使用%ENV或Env perl模块。对于您的示例,这可能是最简单的:

my $version_name = $ENV{versionName}