LoginSignup
3
4

More than 5 years have passed since last update.

このWindowsのコマンドラインにイジェクトを

Last updated at Posted at 2017-04-03

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
)
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4