低学歴プログラマの下剋上

田舎出身、上京プログラマの勉強日誌

Dismを使った自動ディスクバックアップ作成

ご無沙汰しております。

昨日の仕事終わりに常駐先のプロパーさんからこんな要望をいただきました。
「POS端末のディスクバックアップを作成する作業を自動化したい」

現在手動で行っているのが以下(だったと思う)
1.SYSTEM領域にドライブレター設定
2.SYSTEM領域のバックアップをDismコマンドで作成
3.CドライブのバックアップをDismコマンドで作成

2と3は苦労せずに出来そうだけど、曲者なのは1でした。

1を行うにはDiskpartコマンドを使用します。
Diskpartコマンドを自動化するには、管理者権限での実行が必須です。SYSTEM領域にドライブレターを設定します。

diskpart
rem ボリューム一覧表示
list vol

rem 表示されたボリュームのInfoがシステムのvolumeを選択
select vol=0

rem ドライブレターを設定 埋まってなさそうなSを指定
assign letter=s

今回は上記の内容を自動で行いたいので、一度リダイレクトでlist volを出力して、
正規表現でシステム領域のVolumeを割り出して設定してみました。

@echo off
setlocal enabledelayedexpansion

rem 管理者実行するため、カレントを自分の配置場所に移動
cd /d %~dp0

set vol=nul
for /f "delims=" %%a in (volume.txt) do (
	rem 英語環境の場合は"SYSTEM"や、"Hidden"になるかも
	echo "%%a" | find "システム" >nul 2>&1
	
	if not errorlevel 1 (
		set vol=%%a
	)
)

if not vol==nul (
	rem 半角SP+半角SP+Volumeで0~8
	set vol=%vol:~9,2%
	echo SYSTEM Volume=!vol!
)

rem スクリプト作成
echo select vol=!vol! > script.txt
echo assign letter=s >> script.txt
echo exit >> script.txt

rem SYSTEMボリュームにレター設定
diskpart /s script.txt > diskpart.log

rem あとは設定したSドライブのバックアップをDismを使用して作成する

pause

Dismのコマンドは忘れたので参考URL貼っておきます
https://msdn.microsoft.com/ja-jp/library/hh825072.aspx