スポンサーリンク
スポンサーリンク

【バッチ】必要なPCソフトを自動インストール! キッティングに便利なbatの作り方

備忘録
スポンサーリンク

寒くなってきました。そろそろ情シス社員がPCキッティングに勤しむ季節ですね。

今回は、効率的にキッティングするためにソフトウェアのインストールを自動化するバッチファイルの作り方を解説します。

スポンサーリンク

共有フォルダなどにインストーラーを格納

バッチファイルと同じ階層にフォルダを作成します。今回はフォルダ名「installer」としました。

スポンサーリンク

バッチファイル

ローカル上(USBメモリなど)で実行する場合

@echo off
setlocal enabledelayedexpansion
cd /d %~dp0

rem 管理者権限で実行
openfiles > nul

if "%1"=="" (
set arg=
) else (
set arg= -ArgumentList "%1"
)
if errorlevel 1 (
   PowerShell.exe -Command Start-Process \"%~f0\"%arg% -Verb runas
   exit
)

rem OSのbit数確認
set x86_mode=FALSE
if "%PROCESSOR_ARCHITECTURE%" EQU "x86" set x86_mode=TRUE
rem ビットモード手動設定(引数1に32で32bitモード)
if "%1"=="32" set x86_mode=TRUE

rem インストーラー格納先フォルダ設定
set inst=installer\

rem インストールコマンドを設定(サイレントインストールできるように引数も指定しておく)
set DotNET35="Dism /online /enable-feature /featurename:NetFX3 /all /Source:%inst% /limitaccess /norestart"
set DirectX=""%inst%DirectX\DXSETUP.exe" /silent"
set Seven-Zip=""%inst%7z2301-x64.exe" /S"
set VLC=""%inst%vlc-3.0.20-win64.exe" /S"
set GoogleChrome="msiexec /i "%inst%googlechromestandaloneenterprise64.msi" /quiet /norestart"
set Acrobat=""%inst%AcroRdrDC2100120155_ja_JP.exe" /sPB /rs /rps /l"
set Office="%inst%office365\Install_Office365.bat"


if %x86_mode%==TRUE (
echo ◆◆◆32bit モード◆◆◆
echo このスクリプトは32bit OSには対応していません。手動でインストールしてください。
pause
exit /b 0
) else (
echo ◆◆◆64bit モード◆◆◆
)

call :do_install ".NET Framework 3.5" %DotNET35% "FALSE"
call :do_install "DirectX 9.0c" %DirectX% "FALSE"
call :do_install "7-Zip" %Seven-Zip% "C:\Program Files\7-Zip\7zFM.exe"
call :do_install "VLC media player" %VLC% "C:\Program Files\VideoLAN\VLC\vlc.exe"
call :do_install "Google Chrome" %GoogleChrome% "C:\Program Files\Google\Chrome\Application\chrome.exe"
call :do_install "Acrobat Reader" %Acrobat% "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
call :do_install "Office 365" %Office% "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"

pause
exit /b 0

:do_install
echo %~1 をインストール
if exist %3 (
    echo 既にインストールされているためスキップします。
) else (
    call %~2
    if errorlevel 0 (
        echo 完了
    ) else (
        echo エラーが発生しました: 終了コード %errorlevel%
    )
)
exit /b 0

ネットワーク上の共有フォルダから実行する場合

@echo off
setlocal enabledelayedexpansion

rem cdはネットワークパスを指定できないため、pushd…popdで回避
pushd %~dp0

rem 管理者権限で実行
openfiles > nul

if "%1"=="" (
set arg=
) else (
set arg= -ArgumentList "%1"
)
if errorlevel 1 (
   PowerShell.exe -Command Start-Process \"%~f0\"%arg% -Verb runas
   exit
)

rem OSのbit数確認
set x86_mode=FALSE
if "%PROCESSOR_ARCHITECTURE%" EQU "x86" set x86_mode=TRUE
rem ビットモード手動設定(引数1に32で32bitモード)
if "%1"=="32" set x86_mode=TRUE

rem インストーラー格納先フォルダ設定
set inst=installer\

rem インストールコマンドを設定(サイレントインストールできるように引数も指定しておく)
set DotNET35="Dism /online /enable-feature /featurename:NetFX3 /all /Source:%inst% /limitaccess /norestart"
set DirectX=""%inst%DirectX\DXSETUP.exe" /silent"
set Seven-Zip=""%inst%7z2301-x64.exe" /S"
set VLC=""%inst%vlc-3.0.20-win64.exe" /S"
set GoogleChrome="msiexec /i "%inst%googlechromestandaloneenterprise64.msi" /quiet /norestart"
set Acrobat=""%inst%AcroRdrDC2100120155_ja_JP.exe" /sPB /rs /rps /l"
set Office="%inst%office365\Install_Office365.bat"


if %x86_mode%==TRUE (
echo ◆◆◆32bit モード◆◆◆
echo このスクリプトは32bit OSには対応していません。手動でインストールしてください。
pause
exit /b 0
) else (
echo ◆◆◆64bit モード◆◆◆
)

call :do_install ".NET Framework 3.5" %DotNET35% "FALSE"
call :do_install "DirectX 9.0c" %DirectX% "FALSE"
call :do_install "7-Zip" %Seven-Zip% "C:\Program Files\7-Zip\7zFM.exe"
call :do_install "VLC media player" %VLC% "C:\Program Files\VideoLAN\VLC\vlc.exe"
call :do_install "Google Chrome" %GoogleChrome% "C:\Program Files\Google\Chrome\Application\chrome.exe"
call :do_install "Acrobat Reader" %Acrobat% "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
call :do_install "Office 365" %Office% "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"

popd
pause
exit /b 0

:do_install
echo %~1 をインストール
if exist %3 (
    echo 既にインストールされているためスキップします。
) else (
    call %~2
    if errorlevel 0 (
        echo 完了
    ) else (
        echo エラーが発生しました: 終了コード %errorlevel%
    )
)
exit /b 0
スポンサーリンク

コマンドの解説

バッチをネットワーク上に配置した場合

バッチをネットワーク上の共有フォルダに配置すると、各PCから容易にアクセスできて便利ですが、3行目のcdでは \\192.168.0.1 などから始まるネットワークパスを指定できずエラーになります。

この問題はpushd…popdコマンドで回避できます。指定したパスを一時的にネットワークドライブに設定して、popdで切断します。

pushd %~dp0
…
popd

OSのbit数を確認して分岐する

実行中のOSが32bit版か64bit版か判定し、分岐するためのコマンドです。3~4行目はデバッグ用ですので、不要なら入れなくても大丈夫です。

set x86_mode=FALSE
if "%PROCESSOR_ARCHITECTURE%" EQU "x86" set x86_mode=TRUE
rem ビットモード手動設定(引数1に32で32bitモード)
if "%1"=="32" set x86_mode=TRUE

if %x86_mode%==TRUE (
echo ◆◆◆32bit モード◆◆◆
rem ここに32bit用のインストールコマンドを記載
) else (
echo ◆◆◆64bit モード◆◆◆
rem ここに64bit用のインストールコマンドを記載
)
rem ここに共通のインストールコマンドを記載

最近のOSは64bit版ばかりですので、あえて32bitに対応せず、そのまま終了させることも可能です。

if %x86_mode%==TRUE (
echo ◆◆◆32bit モード◆◆◆
echo このスクリプトは32bit OSには対応していません。手動でインストールしてください。
pause
exit /b 0
) else (
echo ◆◆◆64bit モード◆◆◆
)

インストールコマンド

以下のコマンドをインストールしたいソフトウェアの分だけ入れることで、次々インストール作業を行います。

call :do_install "表示するソフト名" "実行するファイルとコマンド" "既インストールチェック用パス"

ファイルとコマンド部分

便宜上、コマンド部分を独立して変数に格納しました。サイレントインストールや再起動抑制の引数を調べておきましょう。

rem インストールコマンドを設定(サイレントインストールできるように引数も指定しておく)
set DotNET35="Dism /online /enable-feature /featurename:NetFX3 /all /Source:%inst% /limitaccess /norestart"
set DirectX=""%inst%DirectX\DXSETUP.exe" /silent"
set Seven-Zip=""%inst%7z2301-x64.exe" /S"
set VLC=""%inst%vlc-3.0.20-win64.exe" /S"
set GoogleChrome="msiexec /i "%inst%googlechromestandaloneenterprise64.msi" /quiet /norestart"
set Acrobat=""%inst%AcroRdrDC2100120155_ja_JP.exe" /sPB /rs /rps /l"
set Office="%inst%office365\Install_Office365.bat"

実行部分

上記で設定したコマンドを実行する部分です。

指定したファイルが存在する場合は既にインストールしているとみなし、そのソフトウェアのインストーラー実行をスキップするようにしています。

:do_install
echo %~1 をインストール
if exist %3 (
    echo 既にインストールされているためスキップします。
) else (
    call %~2
    if errorlevel 0 (
        echo 完了
    ) else (
        echo エラーが発生しました: 終了コード %errorlevel%
    )
)
exit /b 0

自動的に管理者権限で実行する

自動的に管理者権限で実行するコマンドの解説はこちら