特定のディレクトリ内のすべてのサブディレクトリとファイルを調べて、持っている本の一覧と数を表示させるためのマクロです。
2020.04.01. 追記 エクセル等に持ち出すための表も作成するように修正しました。
2021.06.06. 追記 ファイル更新日をテーブルに表示するよう変更しました。(ver.3.0.1)
//TotalBooks Counting
//check All Directories and Files in a user-specified directory
//for PDF, JPEG, PNG, zip
//jpg,png -> 1 count / 1 directory
version = "3.0.2";
print("");
print("TotalBooks Counting");
print("ver",version);
openDir = getDirectory("chose open folder");
count = 0;
Table.create("TotalBooks");
listFiles(openDir);
function listFiles(dir){
list = getFileList(dir);
for(i=0; i<list.length; i++){
//detect a directory -> do function listFiles recursively
if(endsWith(list[i],"/")){
listFiles(dir+list[i]);
//PDF, JPG, PNG, ZIP-> Record
}else if(endsWith(list[i],".pdf")||endsWith(list[i],".PDF")||endsWith(list[i],".jpg")||endsWith(list[i],".JPG")||endsWith(list[i],".jpeg")||endsWith(list[i],".JPEG")||endsWith(list[i],".png")||endsWith(list[i],".PNG")||endsWith(list[i],".zip")||endsWith(list[i],".ZIP")){
count++;
//Update date
unixtime = File.lastModified(dir+list[i]);
unixtime = parseInt(unixtime);
tokyotime = ConvertUnixTimeToTokyoTime(unixtime);
//Output table
Table.set("No.",count-1,count);
Table.set("Directory",count-1,dir);
Table.set("Name",count-1,list[i]);
Table.set("Last Updated",count-1,tokyotime);
//Print Log
print(count,":",dir+list[i]);
//JPEG,PNG -> skip to next dir (1 count / 1 dir)
if(endsWith(list[i],".jpg")||endsWith(list[i],".JPG")||endsWith(list[i],".jpeg")||endsWith(list[i],".JPEG")||endsWith(list[i],".png")||endsWith(list[i],".PNG")){
i=list.length; //break
}
}
}
}
print("");
print(openDir,"....");
print("In total ",count," books");
Table.update;
//-----------------------------------------------------------------------------
//Define function ConvertUnixTimeToTokyoTime
function ConvertUnixTimeToTokyoTime(unixtime) {
year = 0;
leap = 0;
GMT_TOKYO = 9*60*60;
SECONDS_IN_A_DAY = 24*60*60;
UNIX_EPOCH_DAY = 1969*365 + floor(1969/4) - floor(1969/100) + floor(1969/400) + 306; // days from 0000/03/01 to 1970/01/01
YEAR_ONE = 365;
YEAR_FOUR = YEAR_ONE * 4 + 1;
YEAR_100 = YEAR_FOUR * 25 - 1;
YEAR_400 = YEAR_100*4 + 1;
monthday = newArray (0,31,61,92,122,153,184,214,245,275,306,337);
unixtime = unixtime / 1000; //msec to sec
unixtime = unixtime + GMT_TOKYO;
second = floor(unixtime % 60);
minute = floor(unixtime / 60) % 60;
hour = floor(unixtime / 3600) % 24;
unixday = floor(unixtime / SECONDS_IN_A_DAY);
unixday = unixday + UNIX_EPOCH_DAY;
year = year + 400 * floor(unixday / YEAR_400);
unixday = unixday % YEAR_400 ;
n = floor(unixday / YEAR_100);
year = year + n * 100;
unixday = unixday % YEAR_100 ;
if (n == 4){
leap = 1;
}else{
year = year + 4 * floor(unixday / YEAR_FOUR);
unixday = unixday % YEAR_FOUR ;
n = floor(unixday / YEAR_ONE);
year = year + n;
unixday = unixday % YEAR_ONE ;
if (n == 4) {
leap = 1;
}
}
if (leap != 0) {
month = 2;
day = 29;
}else{
month = floor(((unixday + 0.4) * 5) / 153);
day = unixday - monthday[month] + 1;
month = month + 3;
if (month > 12) {
year++;
month = month - 12;
}
}
tokyoTime = "" + year + "/" + zeroPad(month,2) + "/" + zeroPad(day,2) + " " + zeroPad(hour,2) + ":" +zeroPad(minute,2) + ":" + zeroPad(second,2);
return tokyoTime;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Define function zeroPadding
function zeroPad(int,digitZeroPad){
if(int < 0){
exit("ZeroPadding Error!! int<0");
}
stringInt = ""+int;
digitStringInt = lengthOf(stringInt);
digitSubtra = digitZeroPad-digitStringInt;
if(digitSubtra < 0){
exit("ZeroPadding Error!! digitSubtra<0");
}
if(digitZeroPad > 0){
for(i=0; i<digitSubtra; i++){
stringInt = "0"+stringInt;
}
}
return stringInt;
}
//-----------------------------------------------------------------------------
ポイント
①PDFとZIPは1ファイル=1冊でカウント。
実行結果
こんな感じで一覧と数が表示されます。私の10年物ショボPCでも数十秒で終わります。
※ JPEGでカウントしているのは、ファイルの数ではなく、フォルダの数です。たとえば「ドラゴンボール」と名付けた1フォルダの中に、全42巻のJPEGデータがどちゃっと全部入っている場合には、「ドラゴンボール」は1冊でカウントされてしまいます。あくまで目安としてお使いください。
マクロの起動方法
①ImageJ上部タブの[Plugins]→[New]→[Macro]で起動したエディタに、記事の一番上のコードをコピペしてtxtファイル(Count_TotalBooks.txt)を作成・保存する。
②保存したファイルをImageJフォルダ内の[plugins]フォルダにしまう。
このとき、[plugins]フォルダの中に新たに適当な名前のフォルダを作って、その中にしまってもOKです。ここでは仮に「自炊」というフォルダにtxtファイルを突っ込んだとします。
③一度ImageJを再起動すると、マクロがインストールされ、起動準備OK。
④上部タブ[Plugins]→[自炊]→[Count TotalBooks]でマクロが実行されます。
ライセンスなんかは一切無いので、ぜひぜひ自由に使ってみてください!