7Zip从2个不同的子文件夹中执行2次提取(仅首次执行)

时间:2017-06-20 18:37:26

标签: perl zip 7zip strawberry-perl activestate

好的,我完全失去了。

我正在尝试从7zip文件中提取所有XML和PDF。 所述文件中有更多内容,所以我只想从PDF文件夹和XML文件夹中提取。保留文件结构,而不是在任何其他文件夹中搜索。

我正在使用7Zip命令行来执行此操作。

我执行的两个子程序几乎相同。

sub Extract_pdfs_from_this
{
  my ($file, $destination) = @_;

  my $sevenzip_executable = '\\\\server\7-Zip\7z.exe';
  my $extract_pdfs = "$sevenzip_executable e -y  -o$destination $file output\\JETPDF\\DISB\\*.pdf ";

  print STDOUT "\n\nExtracting PDFs From $file \n>>$extract_pdfs \n";
  eval{system($extract_pdfs)};
  print STDOUT "Finished Extracting PDFs \n";

  return;
}

...

sub Extract_xmls_from_this
{
  my ($file, $destination) = @_;

  my $sevenzip_executable = '\\\\server\7-Zip\7z.exe';
  my $extract_xmls = "$sevenzip_executable e -y  -o$destination $file staging\\DISB\\OnBase\\*.xml ";

  print STDOUT "\n\nExtracting XMLs From $file \n>>$extract_xmls \n";
  eval{system($extract_xmls)};
  print STDOUT "Finished Extracting XMLs \n";

  return;
}

我这样使用它......

    my $in_extraction_directory = dirname(__FILE__);
    my $input_subdirectory = "$directory\\$subdirectory";
    my @in_seven_zip_files = Get_all_sevenzips_in($input_subdirectory);

    foreach my $sevenzip_file (@in_seven_zip_files)
    {
          $sevenzip_file = "$input_subdirectory\\$sevenzip_file";
      Extract_pdfs_from_this($sevenzip_file, $in_extraction_directory);
      Extract_xmls_from_this($sevenzip_file, $in_extraction_directory);
    }

执行时,PDF会被提取,但不会提取XML。 我收到错误,没有要处理的文件。

我觉得7zip挂在上次调用的文件中。有没有办法关闭它或发布文件?

任何帮助表示赞赏,浪费了很多时间。

谢谢!

2 个答案:

答案 0 :(得分:0)

检查退出状态$?,如果您觉得它已挂起。 你也可以尝试首先提取xmls然后提交pdf,以确保提取pdfs命令是否有问题。

共享控制台输出,可以显示更多详细信息。

答案 1 :(得分:0)

用户错误......正常工作。 我有一个条件:

unless ($number_of_pdfs == $number_of_xmls)
    {
      print STDOUT "The number of PDFs and XMLs did not match!\n\n";
      print STDOUT "PDFs: $number_of_pdfs \nXMLs: $number_of_xmls\nFile: $sevenzip_file \nExtraction Directory: $output_directory\n\n";

      die;
    }

并且在我提取的第一个文件中,XML不在正确的路径中......有人没有遵循模式。对此反应非常尴尬。