外付けHDDのドライブレターを固定したい→ドライブレター変更を簡単にした


外付けHDDのドライブレターを固定したい

きっかけ=親戚のリクエスト

  • ノートPCのドキュメントを外付けHDDにバックアップしたい
  • バックアップソフト(HDD付属)でボタンひとつで同期できるはず
  • HDD外してSDカード刺すとドライブレターとられちゃう
  • ドライブレターを固定したい

作戦

  • さすデバイスとドライブレターを紐づける方法みつからなかった
  • 一旦SDカードとかUSBメモリにとられちゃうのは諦める
  • バックアップソフト設定済みのドライブレターに戻すのを簡単にする

使い方

  • SDとかは外してHDDだけさす
  • HDDに入れといたバッチを管理者として実行

できた

  • 以下のバッチはユーザ入力を求める
  • 親戚に提供したものはドライブレター固定にした、 set /p のところ
ドライブレター変える.bat
@echo off

: 一時ファイル
set diskpartbat=%TMP%\al_diskpart.bat
set listvolume=%TMP%\al_letter.txt
set assignletter=%TMP%\al_mount.txt

: このファイルのあるドライブレター
set currentletter=%~0
set currentletter=%currentletter:~0,1%

: 大文字
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set currentletter=%%currentletter:%%i=%%i%%
echo 現在のドライブレター:%currentletter%

: ボリューム番号
>%listvolume% echo list volume
for /f "usebackq tokens=2" %%a in (`diskpart /s %listvolume%^|findstr /C:" %currentletter% "`) do set volmenum=%%a
del %listvolume%

: ドライブレター変更
set /p newletter=新しいドライブレター:
>%assignletter% echo select volume=%volmenum%
>>%assignletter% echo assign letter=%newletter% noerr

>%diskpartbat% echo diskpart /s %assignletter%
>>%diskpartbat% echo del %assignletter%
>>%diskpartbat% echo del %diskpartbat%

%diskpartbat%

あやしいと思ってるところ

ボリューム番号取得

  • [スペース][ドライブレター][スペース]で文字列マッチ、行取得してる
  • NGケースあるんじゃないかなぁ

ドライブレター変更

  • このバッチファイルの居場所(ドライブ)が変わっちゃうのでバッチが異常終了する
  • これを防ぐためにテンポラリディレクトリにバッチ作って呼び出してるのですが
  • このテンポラリバッチを自分自身で削除してるのって、安全?
  • このバッチをうっかりシステムドライブにコピーして実行したときって、怖くない?

あとそもそも

  • ドライブレター固定する方法、本当にないかな?

以上