「メール検索」(2010/10/06 (水) 23:25:56) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
&topicpath(top=トップ)
#contents(fromhere=true)
**インデックス作成バッチファイル(Hyper Estraier)
mkindex.batとでも名前を付けてaccountsフォルダーに保存。
>cd /d %0\..
>for /d %%A in (*) do (
>cd "%CD%\%%A"
>estcmd gather -cl -fm -cm -sd ".\index" ".\msg"
>)
estcmdの部分を下記に変えるとそれぞれ
estcmd purge -cl ".\index" (削除メールのインデックス削除)
estcmd optimize ".\index" (インデックスの最適化)
ができるので、別のバッチファイルとしてそれぞれ保存すればいい。
どれもaccounts以下のすべてのアカウントに対して行います。
**Hyper Estraierのインデックス作成の高速化
すでにインデックス化されたメールを無視して新規のメールのみインデックス化させる方法です。
1) Qmail3のオプション-検索をカスタムにして、更新のところを下記に変更。
>cscript qm_gather.js "$index" "$msg"
2)下記をqm_gather.jsとしてqmail3と同じフォルダに保存
>var ARGV, index,msg;
>var WshShell = new ActiveXObject('WScript.Shell');
>ARGV = WScript.Arguments;
>index = ARGV(0);
>msg = ARGV(1);
>var objExec = WshShell.Run('cmd /C cscript //B find.js "' + msg + '" | estcmd gather -cl -fm -cm -sd "' + index + '" -', 10, true);
>var objExec = WshShell.Run('cmd /C estcmd create -attr from seq -attr to seq -attr cc seq -attr subject seq -attr @cdate seq "' + index + '"',10,true);
3)accountsフォルダとqmail本体のあるフォルダにfind.jsという名前で次行以下を保存。
>var ARGV, index,msg;
>var WshShell = new ActiveXObject('WScript.Shell');
>var fso = new ActiveXObject("Scripting.FileSystemObject");
>ARGV = WScript.Arguments;
>msg = ARGV(0);
>
>msg = msg.replace("\\","\\\\");
>var fldr, fs, fc, f;
>fldr = fso.GetFolder(msg);
>fs = new Enumerator(fldr.SubFolders);
>for (;!fs.atEnd(); fs.moveNext()){
>fc = new Enumerator(fs.item().files);
>for (; !fc.atEnd(); fc.moveNext()){
>f = fc.item();
>if(f.attributes && 32){
>f.attributes = f.attributes - 32;
>WScript.StdOut.WriteLine(f);
>}
>}
>}
<注意>
必要なときに全文検索窓の「インデックスの更新」を押せば、インデックス化されていないメールのみをインデックス化するので早くなります。
ただし、アーカイブ属性の確認を毎回行うので、この部分をもっとうまく処理すれば更なる高速化が可能です。
さらに、これに対応する全アカウントに対する新規メールインデックス化を行うためのバッチは下記のとおり。
mkindex.batとでもして次行以下をaccountsフォルダに保存
>cd /d %0\..
>for /d %%A in (*) do (
>cd "%CD%\%%A"
>cscript //B ..\find.js ".\msg" | estcmd gather -cl -fm -cm -sd ".\index" -
>estcmd create -attr from seq -attr to seq ->attr cc seq -attr subject seq -attr @cdate seq -attr message-id seq ".\index"
>)
おいらはタスクスケジューラでアイドル時にこれを実行させてます。
estcmd createの行は、属性検索を使わなければ不要です。
**AHK常駐版インデックス作成バッチファイル(Hyper Estraier)
「Hyper Estraierのインデックス作成の高速化」のアイドル時実行関係をAutoHotKeyにやらせる版です。
MailBoxDirを環境に合わせて変えて、mkindex.ahkとでもしてどこでもいいんで保存して実行してください。
常駐して、10分間操作がなかったら全アカウントインデックス化します。
パイプ処理の方法が分からなかったので一時ファイル作成・削除をしてます。ご利用は自己責任で。
>#Persistent
>
>#SingleInstance
>SetBatchLines, -1 ; Make the operation run at maximum speed.
>
>;DefIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock.ico ;通常タスクトレイアイコン
>;WorkIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock_red.ico ;処理中タスクトレイアイコン
>;Menu,TRAY,Icon,%DefIcon%
>
>;=======================================================
>;main
>;=======================================================
>SetTimer,IndexMail,1000
>return
>
>;-------------------------------------------------------
>;メールインデックス処理
>;-------------------------------------------------------
>IndexMail:
>If A_TimeIdlePhysical>600000 ;10分以上操作を行っていなければやる
>{
> if IndexMailFlag<>1
> {
> gosub, DoIndexMail
> IndexMailFlag=1
> }
>}
>else
>{
> IndexMailFlag=0
>}
>return
>
>;-------------------------------------------------------
>;メールインデックス実処理
>;-------------------------------------------------------
>DoIndexMail:
>;Menu,TRAY,Icon,%WorkIcon%
>SplashTextOn, , , メールインデックス更新中
>
>MailBoxDir=D:\bin\QMAIL3\mail\accounts ;accountsフォルダの指定
>AMailList=%MailBoxDir%\AMailList.txt ;処理対象ファイルリスト名
>
>Loop, %MailBoxDir%\*, 2
>{
> IfExist, %AMailList% ;処理対象ファイルリストが既にあったらなんもしない
> {
> Msgbox, %AMailList% が既に存在します
> }
> else
> {
> IndexDir=%A_LoopFileLongPath%\index
> Loop, %A_LoopFileLongPath%\*.msg, , 1
> {
> IfInString, A_LoopFileAttrib , A
> {
> FileAppend, %A_LoopFileLongPath%`n, %AMailList%
> FileSetAttrib, -A
> }
> }
> IfExist, %AMailList%
> {
> runwait, estcmd gather -cl -fm -cm -sd %IndexDir% %AMailList%, , Hide
> FileDelete, %AMailList%
> }
> }
>}
>
>SplashTextOff
>;Menu,TRAY,Icon,%DefIcon%
>return
>
&topicpath(top=トップ)
#contents(fromhere=true)
**インデックス作成バッチファイル(Hyper Estraier)
mkindex.batとでも名前を付けてaccountsフォルダーに保存。
>cd /d %0\..
>for /d %%A in (*) do (
>cd "%CD%\%%A"
>estcmd gather -cl -fm -cm -sd ".\index" ".\msg"
>)
estcmdの部分を下記に変えるとそれぞれ
estcmd purge -cl ".\index" (削除メールのインデックス削除)
estcmd optimize ".\index" (インデックスの最適化)
ができるので、別のバッチファイルとしてそれぞれ保存すればいい。
どれもaccounts以下のすべてのアカウントに対して行います。
**Hyper Estraierのインデックス作成の高速化
すでにインデックス化されたメールを無視して新規のメールのみインデックス化させる方法です。
1) Qmail3のオプション-検索をカスタムにして、更新のところを下記に変更。
>cscript qm_gather.js "$index" "$msg"
2)下記をqm_gather.jsとしてqmail3と同じフォルダに保存
>var ARGV, index,msg;
>var WshShell = new ActiveXObject('WScript.Shell');
>ARGV = WScript.Arguments;
>index = ARGV(0);
>msg = ARGV(1);
>var objExec = WshShell.Run('cmd /C cscript //B find.js "' + msg + '" | estcmd gather -cl -fm -cm -sd "' + index + '" -', 10, true);
>var objExec = WshShell.Run('cmd /C estcmd create -attr from seq -attr to seq -attr cc seq -attr subject seq -attr @cdate seq "' + index + '"',10,true);
3)accountsフォルダとqmail本体のあるフォルダにfind.jsという名前で次行以下を保存。
>var ARGV, index,msg;
>var WshShell = new ActiveXObject('WScript.Shell');
>var fso = new ActiveXObject("Scripting.FileSystemObject");
>ARGV = WScript.Arguments;
>msg = ARGV(0);
>
>msg = msg.replace("\\","\\\\");
>var fldr, fs, fc, f;
>fldr = fso.GetFolder(msg);
>fs = new Enumerator(fldr.SubFolders);
>for (;!fs.atEnd(); fs.moveNext()){
>fc = new Enumerator(fs.item().files);
>for (; !fc.atEnd(); fc.moveNext()){
>f = fc.item();
>if(f.attributes && 32){
>f.attributes = f.attributes - 32;
>WScript.StdOut.WriteLine(f);
>}
>}
>}
<注意>
必要なときに全文検索窓の「インデックスの更新」を押せば、インデックス化されていないメールのみをインデックス化するので早くなります。
ただし、アーカイブ属性の確認を毎回行うので、この部分をもっとうまく処理すれば更なる高速化が可能です。
さらに、これに対応する全アカウントに対する新規メールインデックス化を行うためのバッチは下記のとおり。
mkindex.batとでもして次行以下をaccountsフォルダに保存
>cd /d %0\..
>for /d %%A in (*) do (
>cd "%CD%\%%A"
>cscript //B ..\find.js ".\msg" | estcmd gather -cl -fm -cm -sd ".\index" -
>estcmd create -attr from seq -attr to seq -attr cc seq -attr subject seq -attr @cdate seq -attr message-id seq ".\index"
>)
おいらはタスクスケジューラでアイドル時にこれを実行させてます。
estcmd createの行は、属性検索を使わなければ不要です。
**AHK常駐版インデックス作成バッチファイル(Hyper Estraier)
「Hyper Estraierのインデックス作成の高速化」のアイドル時実行関係をAutoHotKeyにやらせる版です。
MailBoxDirを環境に合わせて変えて、mkindex.ahkとでもしてどこでもいいんで保存して実行してください。
常駐して、10分間操作がなかったら全アカウントインデックス化します。
パイプ処理の方法が分からなかったので一時ファイル作成・削除をしてます。ご利用は自己責任で。
>#Persistent
>
>#SingleInstance
>SetBatchLines, -1 ; Make the operation run at maximum speed.
>
>;DefIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock.ico ;通常タスクトレイアイコン
>;WorkIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock_red.ico ;処理中タスクトレイアイコン
>;Menu,TRAY,Icon,%DefIcon%
>
>;=======================================================
>;main
>;=======================================================
>SetTimer,IndexMail,1000
>return
>
>;-------------------------------------------------------
>;メールインデックス処理
>;-------------------------------------------------------
>IndexMail:
>If A_TimeIdlePhysical>600000 ;10分以上操作を行っていなければやる
>{
> if IndexMailFlag<>1
> {
> gosub, DoIndexMail
> IndexMailFlag=1
> }
>}
>else
>{
> IndexMailFlag=0
>}
>return
>
>;-------------------------------------------------------
>;メールインデックス実処理
>;-------------------------------------------------------
>DoIndexMail:
>;Menu,TRAY,Icon,%WorkIcon%
>SplashTextOn, , , メールインデックス更新中
>
>MailBoxDir=D:\bin\QMAIL3\mail\accounts ;accountsフォルダの指定
>AMailList=%MailBoxDir%\AMailList.txt ;処理対象ファイルリスト名
>
>Loop, %MailBoxDir%\*, 2
>{
> IfExist, %AMailList% ;処理対象ファイルリストが既にあったらなんもしない
> {
> Msgbox, %AMailList% が既に存在します
> }
> else
> {
> IndexDir=%A_LoopFileLongPath%\index
> Loop, %A_LoopFileLongPath%\*.msg, , 1
> {
> IfInString, A_LoopFileAttrib , A
> {
> FileAppend, %A_LoopFileLongPath%`n, %AMailList%
> FileSetAttrib, -A
> }
> }
> IfExist, %AMailList%
> {
> runwait, estcmd gather -cl -fm -cm -sd %IndexDir% %AMailList%, , Hide
> FileDelete, %AMailList%
> }
> }
>}
>
>SplashTextOff
>;Menu,TRAY,Icon,%DefIcon%
>return
>
表示オプション
横に並べて表示:
変化行の前後のみ表示: