USBメモリーとハードディスクの同期
USBメモリーにハードディスクの一部をコピーして外
出時に持ち歩きたいが、
ドライブレターが自動的に変更されてしまうので面倒く
さい。
そこで、ボリュームIDというドライブのシリアル番号
とラベルを登録して
自動的にUSBメモリーを検索して、決められた場所の
フォルダを同期するスクリプトを書いてみた。
必要なもの
ドライブID検出ツール(Visual C++.net
2003でのソースコード,Makefile)
Ruby(MSWIN32)
スクリプト本体
RoboCopy.exe(Vistaでは標準で入っているらしい、XP/2000/2003ではリソースキットに付属)
注:
Windows2000のリソースキットは有料の上、既に配布終了しました。
XPもダウンロード可能ではない模様です。
実はWindows2000でもXP
でも2003リソースキット内のRoboCopy.exeは単体動作可能です。
Windows2003
リソースキットをダウンロードし、そのファイルをWinRARで開いて中身の.msiを抽出します。
この.msiファイルをさらにWinRARで開くと各種コマンドが一個一個直接抽出できます。
こうして実行ファイルの
RoboCopy.exeを抽出し、環境変数PATHの掛かっている場所にコピーするだけで使えます。
ライセンス的に微妙ですが。
設定の手順
STEP(1):インストール
好きな場所に例えばC:\TOOLSというフォルダを作る。
C:\TOOLSにRoboCopy.exe, drives.exe, usbmir.rbをコピーする。
(すでにリソースキットから導入済みならRoboCopyは改めてコピーせずとも良い)
C:\TOOLSが環境変数PATHに含まれていなければ,
コントロールパネルのシステムの詳細の環境変数のウインドウから登録する。
例:C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\RUBY\BIN;C:\TOOLS
この次はRubyユーザーなら既に設定済みの可能性が高いが、以下の手順。
C:\>ASSOC .rb=RubyScript
C:\>FTYPE RubyScript=C:\RUBY\BIN\RUBY.EXE -Ks "%%1" %%*
コントロールパネルのシステムの詳細の環境変数で、
PATHEXTに.RBを追加する。
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.RB
STEP(2):ドライブの調査
drivesコマンドを使ってUSBメモリのIDとボリュームラベルを調べる。
このコマンドを実行すると、その時点で接続されているドライブの情報を全て表示する。
C>drives
C:98F8D9E8:FIXED:NTFS:34876854272/64428584960@SYSTEM
D:888EF018:FIXED:NTFS:27366694912/125830332416@DATA
F:888DC9D9:REMOVABLE:FAT:467632128/513384448@IMATION
Q:00000000:CDROM::0/0@
R:8D643D7E:CDROM:CDFS:0/4512808960@MYCDROM
@マークの後ろにボリュームラベル(付いてなければ@の後ろは空)
ドライブX:の後ろに8桁のIDが表示される
STEP(3):スクリプトに登録
スクリプト本体のusbmir.rbをエディタかメモ帳で開き
変数を設定しておく。
スクリプトの先頭のコメントでも説明しているが、
以下の変数volidにID番号、labelにラベルを入れる(ラベルが無ければ'')
volid = '888DC9D9'
label = 'IMATION'
hddpathにオリジナル側のフルパス、
usbpathにUSBメモリ側のフルパスを入れる
USBメモリーのドライブは変動するので「%s:」と入力する
hddpath = 'D:\SRC\DRIVES'
usbpath = '%s:\DRIVES'
実行のしかた
設定が完璧に終わっていればコマンドプロンプトから
C:\>usbmir
と打ち込むだけで自動的に全て実行され、完了します。
動作確認できたら、ランチャに登録するなど工夫してください。
注:
PSPではメディアが入っていてもシリアル番号がゼロになります。
こういった場合はボリュームラベルをつけて区別して下さい。