在perl中执行批处理文件

时间:2015-08-12 21:26:17

标签: windows perl batch-file

我如何在perl中执行Windows批处理文件?

这是批处理文件

@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt

上面的代码检查名为test.csv的文件是否打开。如果打开,它将返回1,否则它将返回0.我已将此结果保存在test.txt文件中。

如果我在perl文件中使用任何html代码,我使用它来排除html代码。

print <<end_of_file; 
     <html>
          html code inside this
    </html>
end_of_file

有人可以建议我如何以类似的方式将批处理文件包含在perl代码中。

1 个答案:

答案 0 :(得分:4)

与HTML一样,

<<'end_of_file'
@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt
end_of_file

我怀疑你的问题是如何让cmd执行变量中的命令。

use IPC::Open3 qw( open3 );

my $shell_commands = <<'end_of_file';
@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt
end_of_file

{
   pipe(local *R, local *W) or die($!);

   my $pid = open3('<&R', '>&STDOUT', '>&STDERR', 'cmd');
   print(W $shell_commands);
   print(W "exit\n");  
   close(W);
   waitpid($pid, 0);
}

为什么要使用cmd检查是否可以打开文件?!请改用以下内容:

my $ret = open(my $fh, '>>', test.csv) ? 0 : 1;
open(my $result_fh, '>', 'test.txt') or die($!);
print($result_fh "$ret\n");

顺便说一下,在两个版本中,权限错误都会导致文件被报告为打开,并且如果打开共享文件,它会将打开的文件报告为已关闭。