「みんな教えて! 選手権!!」開催のお知らせ

Perlのプログラムを作りたくて質問させていただきます。

1.『AAA』というフォルダ下に「01~04」までのフォルダを作る
2.「AAA」のフォルダ下に「BB」というフォルダがあり、その下に[***_01.bz2][***_02.bz2][***_03.bz2][***_04.bz2]というファイルがあります。
『AAA/BBB/***01.bz2』~『AAA/BBB/***04.bz2』
 これら4つのファイルをコマンド「bunzip2」を使用して解凍する。
3.解凍したファイル[***_01]を「01」のフォルダに移動
         [***_02]を「02」のフォルダに移動
[***_03]を「03」のフォルダに移動
[***_04]を「04」のフォルダに移動

こういった内容をプログラムを作りたいのですが、勉強不足で色々うまくいきません。
どのように作ればいいか教えていただけるとありがたいです。
ちなみにOSは「Windows10」です。
どなたかどうぞよろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    Tacosan様 回答ありがとうございます。
    別にバッチファイルでも構いません。
    バッチファイルだとどのようになりますかね?何分今まで力業でやってきたためプログラムやバッチファイル初心者なのです。
    教えていただけるとありがたいです。

      補足日時:2021/12/07 13:57

A 回答 (3件)

以下のスクリプトを実行し下さい。



$dir = "d:\\goo\\perl\\AAA"; #AAA
mkdir($dir . "\\01");
mkdir($dir . "\\02");
mkdir($dir . "\\03");
mkdir($dir . "\\04");
$dirBB = $dir . "\\BB"; #BB
$ret = opendir(DH,$dirBB);
if ($ret == 0){
die "opendir <<$dirBB>> error: $!";
}
@list = readdir(DH);
closedir(DH);
foreach $fname (@list){
if ($fname =~ /^(.+_)(0[1234])\.bz2$/){
$trgfile = $1 . $2;
$trgdir = $2;
$cmd = "bunzip2 " . $dirBB . "\\" . $fname;
system($cmd);
$oldf = $dirBB . "\\" . $trgfile;
$newf = $dir ."\\" . $trgdir . "\\" . $trgfile;
$ret = rename($oldf,$newf);
if ($ret == 0){
die "rename <<$oldf -> $newf>> error: $!";
}
}
}


使用時の注意事項
$dir = "d:\\goo\\perl\\AAA"; #AAA
は、『AAA』というフォルダです。
あなたの環境にあわせて適切に設定してください。
(絶対パスで指定します)

$dirBB = $dir . "\\BB"; #BB
は「BB」というフォルダです。
あなたの環境にあわせて適切に設定してください。
(相対パスで指定します)
    • good
    • 0
この回答へのお礼

すごい丁寧にありがとうございますm(_ _)m
これを試してみますね!

お礼日時:2021/12/07 18:43

本質的な疑問なんだけど, なんでわざわざ Perl でやるの? バッチファイルじゃだめなの?

    • good
    • 1

1. mkdir


2. opendir/readdir/closedir, system
3. rename もしくは bunzip2 -c オプションでリダイレクション指定

参考)
https://perldoc.jp/func/mkdir
https://perldoc.jp/func/readdir
https://perldoc.jp/func/system
https://perldoc.jp/func/rename
https://linuxjm.osdn.jp/html/bzip2/man1/bzip2.1. …
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報