hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
小ワザ/フォルダ自動整理 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

フォルダ自動整理

フォルダに散らばったファイルを連番フォルダに整理します。ファイルがありすぎて
フォルダすら開くことができないよステファニー!!ということが予期されるソフト(キ
ャッシュ機能などがあるソフトなど)を開発している場合、このモジュールを使うことで
ユーザーに負担掛からないようにします。

immmam.gif
  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

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
fileimmmam.gif
272件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2008-04-03 (木) 22:00:48 (2074d)