2017-06-20 5 views
1

D'accord, je suis à perte totale. J'essaie d'extraire tous les fichiers XML et PDF à partir d'un fichier 7zip. Il y a plus de choses à l'intérieur de ce fichier, donc je veux juste extraire du dossier PDF et du dossier XML. Quitter la structure du fichier et ne pas chercher dans d'autres dossiers. J'utilise la ligne de commande 7Zip pour ce faire.7Zip exécuter 2 extractions à partir de 2 sous-dossiers différents (seulement les premières exécutions)

J'ai deux sous-routines que j'exécute qui sont presque identiques.

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; 
} 

et je l'utilise comme si ...

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); 
    } 

Lorsqu'il est exécuté les fichiers PDF s'extraits mais pas les fichiers XML. Je reçois une erreur, il n'y a aucun fichier à traiter.

Je me sens comme 7zip est accroché sur le fichier de l'appel précédent. Y at-il un moyen de le fermer ou de libérer le fichier?

Toute aide appréciée, beaucoup de temps perdu à ce sujet.

Merci!

+0

Ok, je voudrais aussi ajouter, j'ai maintenant essayé d'écrire les commandes à un fichier batch à exécuter, sans chance ... même chose. – gregnnylf94

Répondre

0

Erreur de l'utilisateur ... Fonctionne exactement comme il se doit. j'avais une condition:

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; 
    } 

et dans le premier fichier que j'extrayait, le XML était pas dans le bon chemin ... Quelqu'un n'a pas suivi modèle. Très embarrassant merci pour la réponse.

0

Vérifiez le statut de sortie $?, si vous pensez qu'il est bloqué. Vous pouvez aussi essayer d'extraire d'abord xmls puis pdfs pour vous assurer que l'extraction de la commande pdfs pose problème.

sortie de la console de partage, ce qui peut montrer beaucoup de détails.

+0

Je reviendrai avec les détails de l'erreur. – gregnnylf94

+0

Juste pour clarifier, ce n'est pas l'extraction des fichiers PDF, c'est soit l'extraction. Si vous exécutez les XML, les premiers XML sont extraits et non les PDF et vice versa. (Parce que le 7zip a été traité déjà ...) – gregnnylf94

+0

Ceci est la seule erreur que je dois partir de .... 'Aucun fichier à traiter Fichiers: 0 Taille: 0 comprimé: 3114222' – gregnnylf94