ファイル・ディレクトリ検索インデックス作成・検索アプリケーション MakeMyIndex、SearchMyIndex

#1. はじめに

ファイルまたはディレクトリのインデックスを作成し、インデックスから検索してファイルの実行またはディレクトリの表示を行うアプリケーションです。
他のPCで作成したインデックスファイルをローカルPCにコピーすることにより、オフラインで検索したり、共有フォルダ越しにファイル・ディレクトリにアクセスしたりすることができます。

![20201205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534247/e3214f9b-74ea-5349-3bce-72e9a7b47ec0.png)

#2. バイナリ

インデックス作成
[MakeMyIndex_1.01_20201205.zip](https://1drv.ms/u/s!Ag9NTi4_AogqlnPQnfd4VcTXK305?e=kMDe27) 最新版
[MakeMyIndex_1.00_20201125.zip](https://1drv.ms/u/s!Ag9NTi4_Aogqlm1BbFQqCcpqp8T0?e=SUGBYY)

インデックス検索
[SearchMyIndex_1.04_20201228.zip](https://1drv.ms/u/s!Ag9NTi4_Aogqlnmo7oA35O9YZANT?e=PCik6G) 最新版
[SearchMyIndex_1.03_20201206.zip](https://1drv.ms/u/s!Ag9NTi4_AogqlnVLZiTyHWfP-CkJ?e=BBTaQv)
[SearchMyIndex_1.02_20201205.zip](https://1drv.ms/u/s!Ag9NTi4_AogqlnT4HjGxFmsVn_SP?e=kgMdLR)
[SearchMyIndex_1.01_20201126.zip](https://1drv.ms/u/s!Ag9NTi4_AogqlnJ4c9G-SaeyUhmE?e=sye9Sz)
[SearchMyIndex_1.00_20201125.zip](https://1drv.ms/u/s!Ag9NTi4_Aogqlm7fwqnjhNjRnqAJ?e=FqvKIn)

フリーウェアとします。無保証です。

#3. 動作環境
.NET Framework 4.7.2以上。
Windows 10 April 2018 Update(1803)以上であればインストールされています。32ビットWindows、64ビットWindowsどちらも対応(64ビット優先)していますが、動作確認は64ビットWindowsのみで行っています。

#4. ソース

[MakeMyIndex GitHubリポジトリ](https://github.com/mayo55/MakeMyIndex)
[SearchMyIndex GitHubリポジトリ](https://github.com/mayo55/SearchMyIndex)

#5. インストール

1) バイナリファイルとexe.configを任意のフォルダに置いて下さい。
2) C:\\MyIndex ディレクトリを作成して下さい。この直下のファイル(複数)をインデックスファイルとして読み込みます。
   ※このディレクトリを作成しないと、SearchMyIndexが何も表示せずに終了します。

#6.使用例(PC 1台)

下記のコマンドを実行します。インデックスファイル名は任意です。

C:\\dir1\\ 配下のファイルのインデックスを作成
(インストールパス)\\MakeMyIndex /f C:\\dir1 /o C:\\MyIndex\\C.dir1.txt

C:\\dir2\\ 配下のディレクトリのインデックスを作成
(インストールパス)\\MakeMyIndex /d C:\\dir2 /o C:\\MyIndex\\C.dir2.txt

SearchMyIndex を実行します。

起動時に全てのインデックスファイルを読み込みます。
検索文字列を入力して検索ボタンもしくはEnterキーを押下すると、全てのインデックスのうち一致するファイル・ディレクトリを表示します。大文字小文字、全角半角、ひらがなカタカナを区別しません。検索文字列を入力せずに検索すると、インデックス内の全てのファイル・ディレクトリを表示します。
検索結果から1行選択してEnter押下またはダブルクリックを行うと、そのファイルを実行またはディレクトリを表示します。

#7. 使用例(PC 2台)

PC1のC:\\dir1\\ 配下のファイルのインデックスを作成(C:\\ の共有名はpc1_cとする)
PC1で下記のコマンドを実行します。
MakeMyIndex /f C:\\dir1 /s \\\\PC1\\pc1_c\\dir1 /o C:\\MyIndex\\PC1.C.dir1.txt

PC2のC:\\dir2\\ 配下のディレクトリのインデックスを作成(C:\\ の共有名はpc2_cとする)
PC2で下記のコマンドを実行します。
MakeMyIndex /d C:\\dir2 /s \\\\PC2\\pc2_c\\dir2 /o C:\\MyIndex\\PC2.C.dir2.txt

PC2 の C:\\MyIndex\\PC2.C.dir2.txt を PC1 の C:\\MyIndex\\ にコピーします。

PC1 で SearchMyIndex を実行します。

PC1のファイルは、
C:\\dir1\\ファイル1-1.txt
などと表示され、
PC2のディレクトリは、
\\\\PC2\\pc2_c\\dir2\\subdir1
などと表示されます。

#8. 使用例(バックアップフォルダを同時に開く)

C:\\の共有名はpc1_c、D:\\の共有名はpc1_dとする。
(インストールパス)\\MakeMyIndex /d C:\\dir3 /s \\\\PC1\\pc1_c\\dir3 /o C:\\MyIndex\\PC1.C.dir3.txt /b D:\\dir3_backup /bs \\\\PC1\\pc1_d\\dir3_backup

/bや/bsを指定してバックアップディレクトリやバックアップ共有フォルダを指定すると、バックアップディレクトリの同じディレクトリを開いてから対象のディレクトリを開きます。/dと使用して下さい。/fでは使用しないで下さい。

#9. 使用例(PC 1台)詳細

下記のようにファイル・ディレクトリが存在するものとします。

```
C:\
├─dir1
│  │  ファイル1-1.txt
│  │  ファイル1-2.txt
│  │  
│  ├─subdir1
│  │      ファイル1-1-1.txt
│  │      ファイル1-1-2.txt
│  │      
│  └─subdir2
│          ファイル1-2-1.txt
│          ファイル1-2-2.txt
│          
├─dir2
│  │  ファイル2-1.txt
│  │  ファイル2-2.txt
│  │  
│  ├─subdir1
│  │      ファイル2-1-1.txt
│  │      ファイル2-1-2.txt
│  │      
│  └─subdir2
│          ファイル2-2-1.txt
│          ファイル2-2-2.txt
```

下記のコマンドを実行します。インデックスファイル名は任意です。

C:\dir1\ 配下のファイルのインデックスを作成
(インストールパス)\MakeMyIndex /f C:\dir1 /o C:\MyIndex\C.dir1.txt

C:\dir2\ 配下のディレクトリのインデックスを作成
(インストールパス)\MakeMyIndex /d C:\dir2 /o C:\MyIndex\C.dir2.txt

下記のファイルが出力されます。

```C.dir1.txt
computername=PC1
dir=C:\dir1

subdir1\ファイル1-1-1.txt
subdir1\ファイル1-1-2.txt
subdir2\ファイル1-2-1.txt
subdir2\ファイル1-2-2.txt
ファイル1-1.txt
ファイル1-2.txt
```

```C.dir2.txt
computername=PC1
dir=C:\dir2

subdir1
subdir2
```

SearchMyIndex を実行します。
検索文字列を入力せずにEnterを押下して検索を行うと、インデックス内が全て表示され、下記の表示となります。

![20201125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534247/31586c03-bce9-9985-31dc-957d68a40835.png)

#10. ボタン操作、キー操作、右クリックメニュー操作

キー操作は検索テキストボックス以外で効きます。

#10.1. 検索

検索を行います。

#10.2. 設定

設定画面を開きます。

#10.3. 再構築

インデックス再構築、再読み込み、再検索を行います。設定画面のインデックス再構築コマンドに、自PCのインデックス再構築を行うバッチファイルを指定して下さい。

指定例：C:\\tools\\MakeMyIndex\\MakeMyIndex.bat

#10.4. 全再構築

インデックス全再構築、再読み込み、再検索を行います。設定画面のインデックス全再構築コマンドに、全てのPCのインデックス再構築を行うバッチファイルを指定して下さい。

指定例：C:\\tools\\MakeMyIndex\\MakeMyIndexAll.bat

#10.5. フルパスファイル名コピー(デフォルト：Shift+C)

選択行のフルパスファイル名をコピーします。

#10.6. ファイル切り取り(デフォルト：Ctrl+X)

選択行のファイルをクリップボードに切り取ります。エクスプローラで貼り付けを行うと選択ファイルが移動してなくなりますが、インデックスの行はそのまま残ります。必要に応じてインデックス再構築を行って下さい。

#10.7. ファイルコピー(デフォルト：Ctrl+C)

選択行のファイルをクリップボードにコピーします。

#10.8. エクスプローラ起動(デフォルト：Shift+Enter)

選択行のファイルまたはフォルダを選択した状態でエクスプローラを起動します。インデックスに/bオプションを指定していてフォルダを選択している場合には、バックアップフォルダを同時に開きます。

#11. インデックス再構築コマンド記述例

下記の例では/sを指定していますが、1PCの場合には指定不要です。あっても問題はありません。

sena C:\\tools\\MakeMyIndex\\MakeMyIndex.bat

```MakeMyIndex.bat
%~dp0\MakeMyIndex /f F:\PT2           /s \\sena\sena_f\PT2           /o C:\MyIndex\sena.F.PT2.txt
%~dp0\MakeMyIndex /f H:\PT2           /s \\sena\sena_h\PT2           /o C:\MyIndex\sena.H.PT2.txt
%~dp0\MakeMyIndex /f I:\PT2           /s \\sena\sena_i\PT2           /o C:\MyIndex\sena.I.PT2.txt
%~dp0\MakeMyIndex /d J:\scan          /s \\sena\sena_j\scan          /o C:\MyIndex\sena.J.scan.txt          /b K:\scan_backup /bs \\sena\sena_k\scan_backup
%~dp0\MakeMyIndex /f K:\PT2           /s \\sena\sena_k\PT2           /o C:\MyIndex\sena.K.PT2.txt
%~dp0\MakeMyIndex /f L:\PT2           /s \\sena\sena_l\PT2           /o C:\MyIndex\sena.L.PT2.txt
%~dp0\MakeMyIndex /f L:\scan縮小      /s \\sena\sena_l\scan縮小      /o C:\MyIndex\sena.L.scan縮小.txt
```

#12. インデックス全再構築コマンド記述例

下記の例は、3台のPCに各自のPCのインデックス再構築を行うMakeMyIndex.batを用意して、1台から自PCのインデックス再構築とリモートの2台に対してインデックス再構築タスクを実行し、終了待ちを行います。その後、作成したインデックスファイルをコピーで持ってきます。

sena インデックス全再構築コマンドを行うPC
sasara リモートPCその1
honami リモートPCその2

sena C:\\tools\\MakeMyIndex\\MakeMyIndexAll.bat

```MakeMyIndexAll.bat
call %~dp0\MakeMyIndex.bat

schtasks /run /s sasara /tn MakeMyIndex
waitfor /t 60 sasaraFinishMakeMyIndex
copy /Y \\sasara\sasara_c\MyIndex\sasara.*.txt C:\MyIndex\

schtasks /run /s honami /tn MakeMyIndex
waitfor /t 60 honamiFinishMakeMyIndex
copy /Y \\honami\honami_c\MyIndex\honami.*.txt C:\MyIndex\
```

sasara C:\\tools\\MakeMyIndex\\MakeMyIndex.bat

```MakeMyIndex.bat
C:\tools\MakeMyIndex\MakeMyIndex /f D:\PT2           /s \\sasara\sasara_d\PT2           /o C:\MyIndex\sasara.D.PT2.txt
```

sasara C:\\tools\\MakeMyIndex\\MakeMyIndexTask.bat

```MakeMyIndexTask.bat
call %~dp0\MakeMyIndex.bat
waitfor /si sasaraFinishMakeMyIndex
```


sasaraにMakeMyIndexというタスク名でタスクを登録する。
1) 「ユーザーがログオンしているかどうかにかかわらず実行する」
2) 操作→プログラムの開始 C:\\tools\\MakeMyIndex\\MakeMyIndexTask.bat にする。

sasaraのファイヤーウォールの「スケジュールされたリモート タスク管理 (RPC)」を許可する。

sasaraのレジストリ変更(再起動不要)
キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
名前 LocalAccountTokenFilterPolicy
型 DWORD(32ビット)
値 1

honami C:\\tools\\MakeMyIndex\\MakeMyIndex.bat

```MakeMyIndex.bat
%~dp0\MakeMyIndex /f D:\Friio         /s \\honami\honami_d\Friio         /o C:\MyIndex\honami.D.Friio.txt
%~dp0\MakeMyIndex /f D:\PT2           /s \\honami\honami_d\PT2           /o C:\MyIndex\honami.D.PT2.txt
%~dp0\MakeMyIndex /f E:\PT2           /s \\honami\honami_e\PT2           /o C:\MyIndex\honami.E.PT2.txt
%~dp0\MakeMyIndex /f F:\Friio         /s \\honami\honami_f\Friio         /o C:\MyIndex\honami.F.Friio.txt
%~dp0\MakeMyIndex /f F:\PT2           /s \\honami\honami_f\PT2           /o C:\MyIndex\honami.F.PT2.txt
%~dp0\MakeMyIndex /f G:\PT2           /s \\honami\honami_g\PT2           /o C:\MyIndex\honami.G.PT2.txt
```

honami C:\\tools\\MakeMyIndex\\MakeMyIndexTask.bat

```MakeMyIndexTask.bat
call %~dp0\MakeMyIndex.bat
waitfor /si honamiFinishMakeMyIndex
```

honamiにMakeMyIndexというタスク名でタスクを登録する。
1) 「ユーザーがログオンしているかどうかにかかわらず実行する」
2) 操作→プログラムの開始 C:\\tools\\MakeMyIndex\\MakeMyIndexTask.bat にする。

honamiのファイヤーウォールの「スケジュールされたリモート タスク管理 (RPC)」を許可する。

honamiのレジストリ変更(再起動不要)
キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
名前 LocalAccountTokenFilterPolicy
型 DWORD(32ビット)
値 1

#13. 既知の問題

1) SearhMyIndex: C:\\MyIndex (変更した場合には変更先のインデックスディレクトリ)が存在しないと、何も表示せずに終了します。
2) SearhMyIndex: 同じフルパスファイルを2回以上読み込むと例外が発生します。重複しないようにインデックスを作成して下さい。
3) SearhMyIndex: Enterキーで検索を行うと ぽーん と音が鳴る。(検索ボタンで検索を行うと音が鳴らない。鳴らないほうが正しい)

#14. 更新履歴

#14.1. MakeMyIndex

2020/12/05 1.01
1) ファイル作成失敗時に中途半端なインデックスファイルにならないように修正。
2) インデックスファイルの拡張子を.txtのみに変更。

2020/11/25 1.00
1) 新規作成。

#14.2. SearchMyIndex

2020/12/06 1.04
1) インデックス読み込みエラーを表示するように変更。
2) 検索時にファイル名が重複した時に例外を発生させずに無視するように変更。

2020/12/06 1.03
1) 右クリックメニューにエクスプローラ表示がなかったのを追加。
2) キーコンフィグにファイル切り取りがなかったのを追加。

2020/12/05 1.02
1) 起動時に全検索を行うように変更。
2) インデックスファイルの拡張子を.txtのみに変更。
3) 設定ボタン、設定画面追加。
4) インデックス再構築(1PC用)、全再構築(複数PC用)ボタン追加。設定画面でバッチファイルの指定が必要。
5) 右クリックメニュー追加。
6) フルパスファイル名コピー、ファイル切り取り、ファイルコピー、エクスプローラ表示追加。

2020/11/26 1.01
1) ソート順をエクスプローラ準拠に変更。
2) 検索テキストボックスと検索結果リストボックスの間をPageDown、PageUpで移動(↓、↑と同じ)
3) AND検索、OR検索対応。ANDは検索文字列を半角スペース区切り、ORは a | b 、a | b | c 等の形式。

2020/11/25 1.00
1) 新規作成。

#15. 参考

[エクスプローラのファイル順のように、自然順ソートで並び替える - DoboWiki](https://wiki.dobon.net/index.php?.NET%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%A6%B5%E6%2F111)
[7Pro同士でリモートPCのタスクを実行したいけどエラー　schtasks - マイクロソフト コミュニティ](https://answers.microsoft.com/ja-jp/windows/forum/windows_7-performance/7pro%E5%90%8C%E5%A3%AB%E3%81%A7%E3%83%AA%E3%83%A2/5d55bf8f-e916-4e29-b5a7-6893e7b2573b)