##キッカケ
仕事柄、OSがクリーンインストールされているPCにツールをインストールする事が多く毎回同じ作業をするのも非効率なので、バッチを作って自動化して仕事をサボろ...楽にしてしまおうと思い作りました。
今回せっかく作ったので同じ事を考え探している方のためにコードを公開いたします。
##今回のバッチで要求される事
- インストールの有無確認
↑レジストリ覗くのが確実ですが、32bitと64bitで場所が違うので今回はファイルを直接参照して確認します。 - 再インストールするかキャンセルするかの確認
- インストーラーの実行(スキップのパターンあり)
- iniファイルのコピー
##今回使うコマンド
・echo : コマンド画面への文字出力
・title : コマンドプロンプトのウインドウタイトル
・set : 変数宣言
・if : 分岐
・goto : ラベル
・rem : コード内へのコメント
・cls : コマンドプロンプトの文字クリア
・xcopy : コピー(copyコマンドの上位互換の認識で大丈夫です)
・pause : 一時停止
##今回使う無くてもいいけどあると便利なオプション(個人の意見)
・@ : "@"を付けた行のコマンドを非表示にする
・> nul : コマンドの後ろに付ける事で"echo off"でも表示される文字を消せる
##バッチファイルを使う上でこれだけは覚えておけコマンド(あくまで個人の意見)
・@echo off : 頭に"@"を付けて"echo"コマンドを非表示にし"off"オプションで以後のコマンドを非表示にする
・pause : 一時停止は大事だよね!
・echo : "echo off"で非表示にしていてもこのコマンドを付けるとその行を表示できます(文字出力で大活躍します)
##コピーするファイルとバッチファイルの入っているフォルダ構成
hogesoft\
Installer.bat
deta\hogesoft.exe
hogehoge.ini
##バッチのクセ
こちらの記事で詳しくまとめられております
参考にさせていただきました!
バッチファイルでの試行錯誤を回避するためのメモ
.bat(バッチファイル)のifコマンド解説。
##自分が"IF"文でハマった事
if exist "C:\\Program Files (x86)\hoge\hogehoge.exe" (
set /p stetas="インストール済みです。インストールしますか?(y/n)"
if /i %stetas% == y goto start
if /i %stetas% == n goto cancel
goto error
)
当初はこのコードを書いていたのですがgoto の使い方が誤っています。
のエラーが出てしまったので最終的にこのコードにしました。
独り言)柔軟な思考って大事ですね...まさかこの解決に1週間かかるとは...
if not exist "C:\\Program Files (x86)\hoge\hogehoge.exe" goto start
set /p stetas="インストール済みです。インストールしますか?(y/n)"
if /i %stetas% == y goto xstart
if /i %stetas% == n goto cancel
goto error
##コード本体
@echo off
title ほげソフト Installer
rem インストール済みかの確認と続行確認
if not exist "C:\\Program Files (x86)\hoge\hogehoge.exe" goto start
set /p stetas="インストール済みです。インストールしますか?(y/n)"
if /i %stetas% == y goto start
if /i %stetas% == n goto cancel
goto error
rem インストールの実行
:start
cls
set /p stetas="ほげほげのインストールを開始してもよろしいですか?(y/n)"
if /i %stetas% == y goto install
if /i %stetas% == n goto cancel
rem インストーラーの実行
echo インストールを開始します...
"deta\hogesoft.exe"
rem 設定ファイルのコピー
xcopy /y "deta\hogehoge.ini" "C:\Program Files\hogesoft\"
cls
echo Complete!
goto end
:cancel
cls
echo インストールをキャンセルしました。
goto end
:error
cls
echo 入力された値が不正です
goto end
:end
echo 終了するには何かキーを押してください。
pause > nul
##最後に
仕事で使う関係上完全なコードを書けなかったのでかなりアレンジしてあり分かりづらい箇所があるかと思いますが、なにかの参考になれば幸いです。
また、あくまでCUIでの操作になるためGUIに慣れ浸しんだ方からするとだいぶとっつきにくいかと思います。