Firefoxのsqliteデータを圧縮するバッチ

Firefoxの起動・終了を速くするために、sqliteデータを再作成・圧縮するというのが流行っている?ようなので、乗ってみる。サイズを小さくするためには一度削除して再作成させるといいのだが、そこはそれ、データが失われるなど難しい。
すっきりしたい場合は、大きくなりがちな places.sqlite をデータを失わずに再作成する解説ページがある。「places.sqlite の再作成 - Firefox Hacks 翻訳日記」http://firefoxhacks.at.webry.info/200902/article_1.html

でもこれ、そのときは小さくなっても、またどうせ大きくなるんだよなあと思うと、定期的にバッチ処理でVacumeするほうが良いのではと思って、「sqlite3 vacume」でググるとぴったりのページがあった。
id:dolphinkick:20090309 「Firefox3のSQLiteファイルを一括してreindex/vacuumするバッチ - 雑木林とコンピュータのメモ帳」
バッチがよくわからないとお書きの通り、スクリプトがこなれてないので、書き直してみた。

  • プロファイルディレクトリ名のややこしい文字列はおまかせで
  • 10KB以上のファイルだけ対象
  • Local Settingsのほうにも、でかいsqliteファイルがあるので対象にする
  • vacume前後のファイルサイズをチェック
  • バックアップを5世代残す (6世代以前のものを消すのは2009-05-14に追加)

なお、sqlite3.exe は、http://www.sqlite.org/download.html からダウンロード。exeファイル1つだけのパッケージとシンプルなので安心。

@echo off
setlocal
set TT=%TIME: =0%
set DT=%DATE:/=%-%TT:~0,2%%TT:~3,2%
set BKDIR=sqlitebackup

pushd "%USERPROFILE%"
for /d %%D in ("Application Data\Mozilla\Firefox\Profiles\*" 
"Local Settings\Application Data\Mozilla\Firefox\Profiles\*") do (
  pushd %%D
  if exist parent.lock echo Firefox is on & goto :EOF
  md %BKDIR% 2>NUL
  for %%F in (*.sqlite) do call :sub "%%F"
  popd
)
goto :EOF

:sub
if %~z1 lss 10240 goto :EOF
copy %1 %BKDIR%\%~n1-%DT%%~x1 >NUL
for /f "skip=5" %%F in ('dir /b /o-n %BKDIR%\%~n1*') do del "%BKDIR%\%%F"
dir %1 | findstr /b "20"
sqlite3.exe %1 reindex
sqlite3.exe %1 vacuum
dir %1 | findstr /b "20"