hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
フォルダに散らばったファイルを連番フォルダに整理します。ファイルがありすぎて
フォルダすら開くことができないよステファニー!!ということが予期されるソフト(キ
ャッシュ機能などがあるソフトなど)を開発している場合、このモジュールを使うことで
ユーザーに負担掛からないようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175#module #uselib "kernel32.dll" #func MoveFile "MoveFileA" sptr,sptr //大量のディレクトリまたはファイルを連番フォルダに指定した数だけ移動 //dirpass ディレクトリパス //num 移動させる数 //equalize 1を指定すると、ひとつの連番フォルダにファイルとフォルダを均等に移動します。 // 0の場合はフォルダの移動を優先します // また、処理速度の観点から既にフォルダに入っているファイルとフォルダの比率は考慮されず、 // 移動可能ファイルフォルダ数が均等値より満たない場合はフォルダが優先的に移動されます。 // その場合は、フォルダのみの連番フォルダになる場合があります。 #deffunc RefreshDirectory str dirpass, int num, int equalize if num=0:dialog "num値が0です",1,"Error:RefreshDirectory":return vdirpass=dirpass if strmid(vdirpass, -1, 1)="\\" : vdirpass=strmid(vdirpass, 0, strlen(vdirpass)-1) //最後の行に”\”がある場合、はずす if vdirpass=dir_win : dialog "システムフォルダには使用できません",1,"Error:RefreshDirectory":return if vdirpass=dir_win+"\\system" : dialog "システムフォルダには使用できません",1,"Error:RefreshDirectory":return if vdirpass=dir_win+"\\system32" : dialog "システムフォルダには使用できません",1,"Error:RefreshDirectory":return chdir vdirpass //カレントディレクトリを移動 dirlist filelist,"*.*",1 //ディレクトリにあるファイルリストを取得 filenum=stat //ファイルの数 dirlist folderlist,"*.*",5 //ディレクトリにあるフォルダリスト foldernum=stat //フォルダの数 if equalize=1{ if num\2=1:rest=1:else:rest=0 //あまり equality=num/2+rest //割り切れない場合、繰り上げる。(フォルダ:ファイル =6:4 の割合になります) } repeat movedir="" fnum=0 //総当りで連番フォルダがあるかどうかを調べる notesel folderlist //フォルダーリスト repeat foldernum,1 //連番フォルダは1から開始される fcnt=str(cnt) repeat foldernum noteget temp,cnt //フォルダ名を取得 if temp=fcnt { //連番フォルダが発見された fnum=temp //発見された連番フォルダの番号を保持する dirlist sflist,fnum+"\\*.*" //中身 sfnum=stat //中身のファイルとフォルダ数 if sfnum<num{ //中身のファイルの数がnumより少ない movedir=temp //現在の連番フォルダを移動ディレクトリに設定 break } } loop if movedir!"":break //movedirが設定されたらbreak loop if int(movedir)=filenum+foldernum : break //設定された移動ディレクトリがファイルとフォルダの数と同じ数なら、 //ひとつも移動させるファイルやフォルダがないと見なし、breakする if movedir=""{ //ひとつもファイルやフォルダを入れることができるフォルダが見つからなかった mkdir str(int(fnum)+1) //最後見つかった連番フォルダの次の値のフォルダを作成する。連番フォルダが無かった場合は1から開始する。 movedir=str(int(fnum)+1) //movedirに新たに作成したフォルダを設定 noteadd str(int(fnum)+1) //フォルダが作成されたので追加する foldernum+ //フォルダが作成されたので数を増やす movecountdown=num //移動可能数は制限されない }else{ //移動フォルダが設定された movecountdown=num-sfnum //移動可能な残り回数 } if movecountdown<=0:dialog ""+movedir+" 現在の移動先フォルダの移動可能ファイル数は0以下です",1,"Error:RefreshDirectory":break notesel folderlist if foldernum!0{ //フォルダの数が0の場合実行しない if equalize=1{ equalitycount=0 //均等カウント } repeat //移動してもよい数だけフォルダを移動する noteget temp,cnt //フォルダの名前を取得 //連番フォルダかどうか調べる rflag=0 repeat int(movedir),1 //現在存在している連番フォルダまでの1~movedirまで繰り返す if temp=str(cnt){ rflag=1 //連番フォルダだった場合、この連番フォルダを移動させないためのフラグを立てる break } loop if rflag=0{ //連番フォルダではない MoveFile dir_cur+"\\"+temp+"\\",dir_cur+"\\"+movedir+"\\"+temp+"\\" //フォルダ移動 notedel cnt //移動したのでリストから除外 foldernum- //ルートのフォルダ数を1減らす movecountdown- //移動可能な数を1減らす if equalize=1{ equalitycount+ //均等 } } if movecountdown=0{ //全部移動しおわった break //break } if foldernum=int(movedir){ //ルートにあるフォルダが連番フォルダだけになった break } if equalize=1{ if equalitycount=equality{ //フォルダを移動できる均等を満たした break } } if rflag=0{ continue cnt //同じループを繰り返す } loop } if movecountdown!0{ notesel filelist repeat movecountdown //移動可能な分だけ移動する noteget temp //ファイル名を取得 MoveFile dir_cur+"\\"+temp,dir_cur+"\\"+movedir+"\\"+temp //ファイル移動 filenum- //ファイルが一つ移動したので数を1減らす notedel //ファイルリストから現在のファイルを除外 if filenum = 0{ //最後のファイルがなくなった break } loop } if int(movedir)=filenum+foldernum : break //設定された移動ディレクトリがファイルとフォルダの数と同じ数なら、 //ひとつも移動させるファイルやフォルダがないと見なし、breakする loop return #global #if 0 RefreshDirectory "",10,1 mes "完了" stop #endif
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji.
Powered by PHP 5.3.27. HTML convert time: 0.055 sec.