2

フォルダーから PDF を自動的にコピーする Perl スクリプトを作成しています。

ユーザーは、許可されていないフォルダーにアクセスできないため、許可されていない情報に誤ってアクセスすることはありません。

私は 1 つのバグを除いて動作する大まかなモックアップを持っています: それは...フォルダを見続け、それらを開いて無限ループに入ります。

次の条件付きステートメントは、ファイルが PDF であることを確認し、それが my に渡され、copyPDF例外を確認してからファイルをコピーします。それ以外の場合は、フォルダーがそのコンテンツをスキャンして繰り返すと、パスしてフォルダーとして開こうとします。

.andを無視する方法をいくつか試しました.. が、常に他のすべてのサブフォルダーも無視することになります。誰かが回避策を持っていますか?

if ($file =~ /\.pdf$/i) {
  print "$file is a pdf\n";
  $fileLocation = "$directoryName/$file";
  copyPDF("$fileLocation", "$file");
}
elsif ($file == '.') {
  #print "argh\n";
}
else {
  $openFolder = "$directory/$file";
  print "*$openFolder";
  openNextDirectory("$openFolder");
}
4

3 に答える 3

4

いつも使ってますuse strict; use warnings;!!!

$file == '.'

生産する

Argument "." isn't numeric in numeric eq (==)

これは、Perl に 2 つの数値を比較するように要求しているためです。あなたが使用している必要があります

$file eq '.'

perldoc perlopperl の演算子の詳細については、を参照してください。

于 2012-12-17T21:57:55.907 に答える
2

この古い質問には、これと同様の質問に対処するいくつかの優れた回答があります。

ディレクトリを再帰的にコピーし、Perl でファイル名をフィルタリングするにはどうすればよいですか?

于 2012-12-17T22:15:17.340 に答える
-3

File::Findモジュールを使用する

use File::Find;
use File::Copy;

my $directory = 'c:\my\pdf\directory';
find(\&pdfcopy, $directory);

sub pdfcopy() {
    my $newdirectory = 'c:\some\new\dir';
    return if ($File::Find::name !~ /\.pdf$/i);
    copy($File::Find::name, $newdirectory) or 
    die "File $File::Find::name cannot be copied: !";
}
于 2012-12-17T22:09:17.113 に答える