広告 アプリ紹介 パソコン

Everythingがデータベース読み込み中で使えないので、予備を作って自動更新するようにした

Everythingというファイル検索アプリを使っている。以前も紹介したが、ファイル名を検索するのが速いので、重宝している。

ただ、検索したいときに開くと、何も出てこないことがある。下のほうを見ると、データベースを読み込んでいると表示されている。

これが結構待たされる。使いたいときに限って読み込み中だと困る。

別の検索ソフトを入れるか、Everythingを二つ使えばどうにかならないかと思った。調べて、保存したファイル一覧を検索する予備用Everythingを作ることにした。さらに、その一覧も自動で更新するようにした。

今回使ったEverythingは1.4.1系だ。

普段用と予備用を分ける

普段用は今まで通りに使う。予備用は、前に保存しておいたファイル一覧だけを検索する。

つまり、普段用が読み込み中のときは、少し古い一覧で探すということだ。

最新でないと困るファイルもあるが、前からあるファイルを探したいだけなら、それでもいい。何も検索できずに待っているよりはいいと思った。

Everythingは、起動するときに別名を指定すると、普段用とは別の設定とデータで起動できる。また、EFUというファイル一覧を保存して検索できる。これを組み合わせる。公式の別名起動の説明と、ファイルリストの説明が参考になる。

普段用のEverythingをもう一度起動しても、別のEverythingがもう一つ立ち上がるわけではない。すでに開いている普段用が表示されるだけなので、読み込み中ならそのままだ。

そこで、予備用は別名で起動し、普段用とは設定とデータを分ける。ここがポイントだ。

なお、データベース読み込み中という表示だけで、毎回データベースを再構築しているのかまではわからなかった。今回は、その原因の解明より、待っている間にも探せるようにすることにした。

まずは一覧を保存する

普段用Everythingが正常に使えるときに、検索欄を空にして、フィルターを「すべて」にする。

EFUには、そのとき検索結果に表示されている項目が保存される。検索語や「画像」などのフィルターが残っていると、その条件に合うファイルだけの一覧になってしまう。データが壊れるわけではないが、予備の一覧からほかのファイルが抜けるため、ここでは絞り込みをすべて外しておく。

「ファイル → エクスポート」で、ファイルの種類を「EFU Everything File List」にして保存する。選択項目だけを書き出す設定があれば外す。名前は検索予備などでいい。

この一覧は、ファイル本体のバックアップではない。ファイル名や場所など、検索するための情報を保存したものだ。普段用の検索対象や除外設定によって、書き出される範囲も変わる。

予備用のショートカットを作る

普段Everythingを起動するショートカットをコピーする。名前を「Everything 予備」にした。

コピーした方を右クリックして「プロパティ」を開く。「ショートカット」タブの「リンク先」に書いてある実行ファイルの後ろに、半角スペースを入れて次を付ける。

-instance "Backup"

例えば、Everythingのインストール先が次の場所なら、完成形はこうなる。インストール先は自分の環境に合わせる。

"C:\Program Files\Everything\Everything.exe" -instance "Backup"

これで起動すると、ウィンドウのタイトルにBackupと付く。こちらが予備用だ。

最初に、NTFSボリュームのインデックス作成に管理者権限が必要だという画面が出た。

NTFSボリュームインデックスは、Cドライブなどに現在あるファイルの名前や場所を読み取り、検索できるようにするためのものだ。普段用のEverythingはこれを使っている。

予備用は、先ほど保存したEFUのファイル一覧だけを検索する。ドライブから現在の情報を読み取る必要はないので、「NTFSボリュームインデックスを作成しません」を選んだ。

ここで一度、保存した一覧ファイルのプロパティを開いてしまった。ショートカットのタブがないので、リンク先が編集できない。EFUは一覧そのものなので、違うものを開いていた。編集するのはEverythingのショートカットだ。

スタートメニューにしかアイコンがない場合は、Everythingを右クリックして「ファイルの場所を開く」からショートカットを探せる。普段用を残し、コピーした方を編集する。

予備用の「ファイル → ファイルリストを開く」で、保存したEFUを選ぶと検索できた。これだけでも、手動で使う予備にはなる。

一覧の作成も自動化する

手動で毎回エクスポートするのは面倒だ。忘れると思うので、ここも自動化する。

使うのは、Everythingの公式補助ツールのESと、Windowsのタスクスケジューラだ。ESで普段用Everythingの検索結果を書き出す。ESの公式説明に書き出しの指定が載っている。

ESを用意する

公式ダウンロードページの「Download Everything Command-line Interface」から入手する。

自分はx64版のESを使った。WindowsのCPU構成に合うものを選ぶ。ダウンロードしたZIPを展開し、ドキュメントに「Everything自動保存」というフォルダーを作って、中身を置いた。

このフォルダーを開くと、すぐに es.exe がある状態にする。

一度書き出してみる

普段用Everythingを起動し、検索できる状態にする。

CMDの作業場所をESのあるフォルダーにして、次を実行する。

es.exe -timeout 60000 -export-efu "検索予備_テスト.efu"

読み込み中なら最大60秒待ってから検索する指定だ。書き出し全体を60秒で打ち切る指定ではない。

処理が終わると、同じフォルダーにテスト用の一覧ができた。

ESのあるフォルダーが作業場所なら、環境変数のPATHへ登録しなくてもCMDから実行できる。別の場所でCMDが開いた場合は、次の形式で移動する。

cd /d "ESがあるフォルダーの実際のフルパス"

失敗しても前の一覧を残す

同じファイル名へ直接書き出すと、そのファイルは上書きになる。普段用が使えない時に、予備までなくなっては困る。

そこで、いったん別の名前へ書き出し、成功したら予備一覧と差し替えることにした。失敗したら前の一覧を残す。差し替え前の一覧も一つ残す。

下の内容をメモ帳に貼り付け、ESと同じフォルダーに Update-Backup.ps1 という名前で保存する。ファイルの種類は「すべてのファイル」、文字コードはWindows PowerShellで日本語を読めるように「UTF-8 BOM付き」にする。

$ErrorActionPreference = 'Stop'
$target = Join-Path $PSScriptRoot 'Backup.efu'
$temp = Join-Path $PSScriptRoot 'Backup.new.efu'
$previous = Join-Path $PSScriptRoot 'Backup.previous.efu'
$log = Join-Path $PSScriptRoot 'Backup.log'

try {
    Set-Location -LiteralPath $PSScriptRoot
    Remove-Item -LiteralPath $temp -Force -ErrorAction SilentlyContinue

    & (Join-Path $PSScriptRoot 'es.exe') -timeout 60000 -export-efu $temp
    if ($LASTEXITCODE -ne 0) {
        throw 'Everythingからの書き出しに失敗しました。'
    }
    if (!(Test-Path -LiteralPath $temp)) {
        throw '新しい一覧が作成されませんでした。'
    }

    $first = Import-Csv -LiteralPath $temp | Select-Object -First 1
    if (!$first -or [string]::IsNullOrWhiteSpace($first.Filename)) {
        throw '一覧が空か、形式を確認できませんでした。'
    }

    if (Test-Path -LiteralPath $target) {
        [System.IO.File]::Replace($temp, $target, $previous)
    } else {
        [System.IO.File]::Move($temp, $target)
    }

    "$(Get-Date) 更新成功" | Add-Content -LiteralPath $log
} catch {
    "$(Get-Date) 更新失敗: $($_.Exception.Message)" |
        Add-Content -LiteralPath $log
    exit 1
}

書き出しの終了状態と、ファイル名を含む一覧かを確認している。全件が漏れなく入っているかまで検査するものではない。

実行するときは、同じ作業場所のCMDで次を実行する。

powershell.exe -NoProfile -ExecutionPolicy Bypass -File ".\Update-Backup.ps1"

ファイルをダブルクリックしたら、開くアプリを選ぶ画面が出た。今回はそれを使わず、上の一行で実行する。

処理が終わったら Backup.log を開く。今回の日時で「更新成功」と出ていれば成功だ。実際に一覧ができて、ログにも更新成功と出た。

予備用に自動保存の一覧を登録する

先ほどは「ファイルリストを開く」で表示したが、自動保存に使う一覧を設定へ登録する。

タイトルにBackupと付いた予備用Everythingで操作する。普段用ではない。

  1. 「ファイル → ファイルリストを閉じる」で、一時的に開いている一覧を閉じる。項目が無効なら、そのままでいい。
  2. 「ツール → オプション → インデックス → ファイルリスト」を開く。
  3. 「追加」で、ESと同じフォルダーにできた Backup.efu を登録する。
  4. 古い一覧が登録されていたら、その登録だけ外す。
  5. 「変更を監視」の項目があれば有効にする。
  6. 「OK」を押し、知っているファイル名を検索して確認する。

予備用にドライブやフォルダーのインデックス登録が残っている場合は、そちらの登録を外す。予備用は保存済み一覧だけを使うようにする。

これで予備用から検索できた。

タスクスケジューラへ登録する

最後に自動実行を登録する。

スタートメニューから「タスク スケジューラ」を開き、「タスクの作成」を選ぶ。名前は「Everything予備一覧の更新」にした。

設定する内容は次の通りだ。

項目設定
実行ユーザー普段用Everythingを使う自分のユーザー
実行条件ユーザーがログオンしているときのみ実行
トリガー自分のログオン時
遅延5分間
繰り返し1日間、継続時間は無期限
同じタスクが実行中の場合新しいインスタンスを開始しない

「操作」は「プログラムの開始」。プログラムには次を指定する。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

「引数の追加」には、次の文字に続けて半角スペースを入れ、引用符で囲んだスクリプトの実際のフルパスを付ける。

-NoProfile -ExecutionPolicy Bypass -File

スクリプトをShiftを押しながら右クリックして「パスのコピー」を使うと入力しやすい。「開始」欄は空欄でいい。スクリプトが自身のあるフォルダーを基準に動くようにしている。

最上位の特権は付けなかった。普段用EverythingはWindows起動時から起動するようにしておく。バッテリー中も更新したい場合は、AC電源で使用しているときだけ開始する条件を外す。

登録した後、タスクを右クリックして「実行」を押した。黒い画面がしばらく表示されたが、処理が終わると閉じた。ログを見ると、更新成功になっていた。タスクからの手動実行はできた。

次回のログオン後や、その後の繰り返し実行は、ログの日時が増えるかを見て確認することにする。

使うときの注意

普段は通常のEverythingを使う。読み込み中なら、予備のショートカットを開いて探す。

予備は前に保存した一覧なので、保存した後に追加したファイルは出てこない。移動や削除も反映されていないことがある。最新の情報が必要なら、普段用が使えるようになってから探す。

また、予備自体も起動時には一覧を読み込む。待ち時間が完全になくなるわけではない。「バックグラウンドで実行」を有効にして、一度開いた後も常駐させると、開き直すときの読み込みを減らせる。

パソコンの電源が切れている間は自動保存できない。普段用が起動していない時も更新に失敗することがある。その場合は前の一覧を使う。

もう一台にも同じ構成を持っていきたいと思っている。ESとスクリプトはコピーして使えるが、検索一覧はそれぞれのPCで作る。二台から同じ一覧へ上書きすると混ざってしまう。タスクの実行ユーザーとスクリプトのパスも、移行先に合わせる必要がある。

まとめ

Everythingが読み込み中で使えないときのために、保存した一覧を検索する予備を作った。予備から検索できることと、タスクから一覧を更新できることは確認できた。

最初の設定はちょっと手間だった。普段用が待っている間だけでも、前の一覧を使って探せるようにしたかったので、ひとまずこの形で使ってみる。

あとは、次回以降の自動更新が動いているか、ログを見て確認していこうと思う。

-アプリ紹介, パソコン
-, , ,