Windowsのコマンドラインには、
イジェクトやUSBメモリの取り外しがありません。
書き込みの終わった媒体の取り出しに1工程手作業が必要です。
Rundll や devcon 等での取り外しが挙がっていますが
このコマンドがあまり知られていないようなので紹介します。
Sysinternals の SYNC というコマンドです。
一応、Microsoft 純正ツールなので
外部のフリーソフトを使うよりは敷居が低いと思います。
ただ、敷居が低いとはいえ英語バージョンのみ、さらに
Sysinternals の コマンドは、最初に使用許諾を求められるので
使い辛いところがあるのも事実です。
そこで、バッチ化により簡易指定とメッセージを日本語で出すようにしました。
Eject d で d ドライブのイジェクトや取り外しが出来ます。
Sync をダウンロードして、パスの通ったところに
exe とバッチを同じフォルダに置いて下さい。
使用OSのビット数に合わせて
32 → sync.exe をそのままに
64 → sync64.exe を sync.exe にリネームするかバッチを変更
して使います。
Windows PE でも使えます。
ただし、Windows PE には、sort.exe が搭載されていませんので
バッチと一緒に作成した PE のビット数に合わせた
sort.exe も同じフォルダに置いて下さい。
Eject.cmd
@echo off
setlocal enabledelayedexpansion
REG ADD "HKCU\SOFTWARE\Sysinternals\Sync" /f /v "EulaAccepted" /t REG_DWORD /d "1" > nul
set Drive=%~1
set Drive=!Drive:~0,1!
set TargetDrive=NotFind
for %%D 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 (
@if exist %%D: if /i "%%D"=="!Drive!" set TargetDrive=Find
)
echo;
if "!TargetDrive!"=="NotFind" echo;!Drive! ドライブが在りません & goto :eof
for /f "delims=" %%0 in ('@sync -nobanner -e !Drive! ^| sort /r') do (
echo;%%0 | find /i "Flushing: !Drive!" > nul && echo;!Drive! ドライブが取り外されました && goto :eof
echo;%%0 | find /i "There is no media" > nul && echo;!Drive! ドライブのデバイスの準備ができていません && goto :eof
)