†REXXのどろぬま†
作成開始日 2014.01.17
最終更新日 2023.07.02
/* これでは受け付けない! */ rc=SysFileTree('*.jpg;*.png;*.gif',file,'FO')ではダメ(コマンドラインのdirなどは、この列挙形式を受け付けるのだが)。それぞれの拡張子を指定して、SysFileTreeを3回実行する必要がある。
rc=SysFileTree('*.jpg',fileJ,'FO') rc=SysFileTree('*.png',fileP,'FO') rc=SysFileTree('*.gif',fileG,'FO')で、この三つの配列(fileJ/fileP/fileG)を連結する処理が必要になる。だが、この処理はけっこう面倒でエレガントではない。
そこで、'*.*'ですべてのファイル名を取得したあと、拡張子で判別して、新しい配列を作り直す方が賢明かと。
/* 処理対象とするファイルの拡張子 */ img_ext='JPG PNG GIF JPEG BMP' rc=SysFileTree('*.*',file,'FOS') newFile.0=0 m=0 DO n=1 TO file.0 PARSE UPPER VAR file.n body '.' ext /* UPPERで大文字化 */ IF POS(ext,img_ext)=0 THEN ITERATE m=m+1 newFile.m=file.n END newFile.0=m【注意】この方法では、パス名やファイル名にピリオド「.」が含まれていると正常に動作しない。その可能性がある場合は拡張子の識別を厳格にする必要がある。
【追記】もう一つ方法を思い付いた;「dir *.png *.jpg *.gif *.bmp *.jpeg /B」の出力をリダイレクトするなり、パイプで受け渡すなりすればいいんだ。バッチコマンドでも「for %f in (*.png *.jpg *.gif ...) do ...」形式は有効なようだし…工夫の仕方はあるな…