Batch file 从批处理调用Perl脚本时不返回任何值?

Batch file 从批处理调用Perl脚本时不返回任何值?,batch-file,for-loop,Batch File,For Loop,我从批处理中调用一个perl脚本并给出一个适当的参数,假设它返回1、2、3或4。但事实并非如此。我从命令行检查了Perl的输出,他们输出了正确的结果,我认为是批处理语法 批次: Perl: 使用严格; 使用警告; 次主要1; 我的$arg1=班次; main1($arg1); 出口 次主要1 { #根据传递的testNum返回1,2,3 my@gp1=(829845851859864867); my@gp2=(861863865); #my@gp4=(826-828830-839843-8448

我从批处理中调用一个perl脚本并给出一个适当的参数,假设它返回1、2、3或4。但事实并非如此。我从命令行检查了Perl的输出,他们输出了正确的结果,我认为是批处理语法

批次: Perl:
使用严格;
使用警告;
次主要1;
我的$arg1=班次;
main1($arg1);
出口
次主要1
{
#根据传递的testNum返回1,2,3
my@gp1=(829845851859864867);
my@gp2=(861863865);
#my@gp4=(826-828830-839843-844847-850852-854860-862883);
#my@gp3=(877-882884);
我的$val1=1;
我的$val2=2;
我的$val3=3;
我的$val4=4;

如果((grep/^$arg1$/,@gp1)| |($arg1>=822&&$arg1=855&&$arg1=877&&$arg1我做了这样一个
test.cmd

@echo off 
setlocal enabledelayedexpansion
for %%I in (%*) do (
   call perlfake %%I
   set lineCase=!ERRORLEVEL!
   echo line case [for %%I] is !lineCase!
)
然后在同一目录中创建
perlfake.cmd

@echo off 
set /a returnvalue="%1 %% 4 + 1"
REM echo (%1 mod 4) + 1 = %returnvalue%
exit /b %returnvalue%
然后调用
测试1234484435

结果:

line case [for 1] is 2
line case [for 2] is 3
line case [for 3] is 4
line case [for 4] is 1
line case [for 844] is 1
line case [for 35] is 4
确定实际返回值的逻辑与perl代码不同,但正如您所看到的,这只是伪代码

因此,通过将调用更改为:

REM call perlfake %%I
call Perl C:/ExecutionSDKTest_10.2.2/TestProp1noRefCheck.pl %%I
关于Perl脚本,我可以看到,当您执行以下操作时,您正在丢弃main1的返回值:

main1($arg1);
exit;
你想要的是:

my $result = main1($arg1);
exit $result;
这样退出Perl将设置errorlevel

编辑:

我现在下载了ActiveState的Perl 5.14.2,并将批处理更改为调用您的Perl脚本,并将更改为返回$result
test.cmd 844 861

返回:

line case [for 844] is 4
line case [for 861] is 2
my $result = main1($arg1);
exit $result;
line case [for 844] is 4
line case [for 861] is 2