Windowsバッチプログラム セッティングを自動化せよ 基礎編

IT関連

いつも当ブログをご覧くださりありがとうございます。

以前にExcelの自動化についてお話ししたことがありますが、今回はWindowsの自動化についてです。

 

尚、この記事はプログラムをかじったことがある人向けの記事なので難しいかもしれません。

ただ、これを機にプログラミングの便利さを知ってもらえたら、とも思っております。

記事をご覧になってご自身で試される場合は自己責任でお願いします。

概要

なぜバッチを作るに至ったのか、バッチプログラムでどういうことができるのかを簡単に説明します。

なぜバッチを作ろうと思ったのか

私は某企業の情報システム部門に勤めており、日々システムの開発を通じて業務改善に努めております。

その業務の一つに、パソコンのセッティング作業(キッティングとも言う)があります。

社員の皆さんが使うパソコンの初期設定のことですが、これがそこそこ大変で、1台につき1時間半近くの時間がかかります。

それはもちろん手作業で行いますが、1時間半x台数なので、10台入荷したときは気が滅入ります・・・。

それをExcelVBAのようにプログラムで自動化できたら最高だなと思っていました。

 

どういうことができるのか

バッチを使えばどういうことが自動化できるのかというと、

  • ユーザアカウントの追加
  • IPやDNSサーバのアドレス設定
  • スクリーンセーバーの設定
  • 拡張子の表示をデフォルトに
  • リモートアシスタンスの無効
  • リモートデスクトップの有効
  • ファイルを指定場所へ移動
  • フォルダを作成
  • フォルダの共有化
  • フォルダのパーミッションを変更
  • フルコンピュータ名の変更
  • ワークグループの変更
  • 各種アプリケーションのインストール
  • 不要アプリケーションのアンインストール

などが自動化できます。

ExcelVBAでお話しした時と同じ表現ですが、手で行う作業はプログラムで書くこともできるということです。

セッティングでやることの一覧なので、もちろん他にもできることはたくさんあります。

バッチプログラムの効果

もちろん破壊力抜群です。

1時間半かかる作業が45分以下に短縮しました。

案外短縮できていないように見えますが、それはWindowsUpdateやアプリインストールのための実質的な待ち時間なので、私がパソコンを操作している時間はもっともっと少ないです。

というか、私がほとんどパソコンに触ることは無くなりました。

私はバッチプログラムをダブルクリックするだけです。

 

バッチできなかったことは

私の経験で出来なかったことを挙げると、

  • WindowsUpdateの実施と完了
  • 外字の登録
  • 既定のプログラムの設定
  • 電源の設定
  • アプリ内部で行う設定

です。

私がやり方を知らないだけかもしれません。

バッチプログラムを書く前に

基礎の前に、プログラムを書くソフト、お作法、注意点などをご紹介します。

プログラムを書くソフト

TeraPadなどのエディタソフトを使いましょう。Windows標準のメモ帳は避けたほうがいいです。

TeraPadのダウンロードはこちら

TeraPadは無料で安全ですし、インストール作業も次へ次へで終了するので簡単です。

上記リンクからダウンロードできない場合は「Terapad」で検索してください。

もちろん有名な「サクラエディタ」や「SublimeText」でも構いません。

 

先頭には@echo offをつけること

エディタを開いてプログラムを書いていくのですが、決まり文句があります。

行頭には必ず@echo offと書きましょう。

こんな感じです。

書かないと余計な文字が表示されて見にくくなるので、必ずつけるようにしましょう。

 

文字コードと改行コード

特段の理由がなければ、文字コードはSHIFT-JIS(SJIS)改行コードはCRLFで作ります。

TeraPadの右下には文字コードと改行コードが表示されるので確認できるはずです。

ファイルメニューの中に、文字/改行コード指定保存というのがあるので、そこで指定することもできます。

Windows標準のメモ帳は、画面上にその表示がなく指定も曖昧なので使わない方がいいのです。

 

名前を付けてファイルを保存

プログラムは名前を付けてファイルとして保存しますが、拡張子は.batにします。

こんな感じのアイコンになります。

ダブルクリックするとプログラムが実行されます。

 

コメントアウトrem

プログラムを知ってる方なら基礎の基礎、コメントアウトの書き方です。

コメントアウトとはプログラムの間に書くメモのことです。

プログラムは基本英語ですし、どんな動きをするのか読み解かなければならないのは作り手としても不便です。

コメントアウトの書き方はプログラミング言語によって異なりますが、バッチの場合は行頭にremと書きます。

:でもいいそうですが、まれに効かない場合があるそうです。

正式は「rem」です。

rem コメントだよ

 

管理者権限で実行する

管理者権限が必要な命令は普通にダブルクリックするだけではダメです。

バッチファイルを右クリックして管理者として実行をクリックして実行しましょう。

ちなみに、私のやりたいことは、ほとんど管理者権限が必要でした。

 

ディレクトリを意識すること

当たり前の話ですが、コマンドプロンプトなどのCUIではディレクトリの意識が必要です。

相対パスや絶対パスは意識しましょう。

バッチファイルをデスクトップに置いて実行すれば、カレントディレクトリはデスクトップです。

C:\Users\ユーザー名\Desktop>

管理者権限で実行すれば、カレントディレクトリはsystem32です。

C:\WINDOWS\system32>

 

使い手と作り手の概念

プログラミングでは当たり前の話ですが、プログラムを書く人は作り手です。

出来上がったプログラムを実行する人は使い手です。

私の場合は自分が使うために作るのですが、やはり使い手のことを考えて作る方が望ましいです。

 

バッチプログラムは見えない

こんなバッチプログラムがあったとします。

これを実行すると、まずウインドウが開きます

そして、中に書かれているプログラムが上から順に処理され、処理が終わったら問答無用でウインドウは閉じられます。

ゆえに、プログラマーの入門であるHello Worldなどを書いたところで、人間には見えません。

なぜなら、

  1. ウインドウが開く
  2. Hello Worldが表示される(処理)
  3. ウインドウが閉じる

この1~3が一瞬で行われるためです。

内容を確認したければ、途中でプログラムを止める命令を入れる必要があります。

それは後で出てくるプログラム記述編で書きます。

 

プログラム記述編

書き方の基礎です。

文字を表示する echo

画面上に文字を表示するにはechoを使います。前述したとおり先頭行の@echo offはマストです。

@echo off
echo Hello World

 

空行・改行を空けたい echo.

改行の書き方は、

@echo off
echo.

です。「echo」と「.」の間は空いていたらダメです。

 

処理を一旦止める pause

前述した、途中プログラムを止める命令です。

echoを使ってhello worldと書いたところで、pauseが無ければ目視する前にウインドウは消えてしまいます。

書き方はこんな感じです。

@echo off
pause

 

こちらが実行結果です。

これはつまり、プログラムを一旦止めて、使い手側に続けるか否かを問うているわけです。

使い手側が何かキーを押せば、プログラムは続行します。

逆にキャンセルしたければ、キーボードの「Ctrl+C」と「Y」でキャンセルできます。

 

尚、続行するには何かキーを押してください...を表示したくない場合は、

@echo off
pause > nul

と書きます。

 

ここまでで出来ること

一旦ここまでで出来ることです。

そもそもechoって何のために使うの?と思うかもしれません。

バッチファイルは私やあなたが作ったところで、自分だけが使うかどうかはわかりません。あまりに便利に感じたら知人に使ってほしいと思うこともあるでしょう。

しかし、プログラムが解らない人間からみれば、何が起きるか不安になります。

 

バッチプログラムは、大事なExcelやメールなど、全てのファイルを消すことが可能ですから。

 

ゆえに、作り手は使い手のために、echoを使って随所にこういう文章を入れてあげると親切です。

これだと何が行われるのかが判るので親切ですよね。

このコードは下記です。

@echo off

echo.
echo -----------------------------------------
echo ○○株式会社 セッティングプログラム vol.1
echo -----------------------------------------
echo このプログラムではアカウントの追加と
echo セッティングのため一時的に仮のIPアドレスを振ります。
echo.
echo.

echo 処理(1/2) アカウントを追加します。
echo 続行するには何かキーを押してください...
echo (キャンセルの場合はCtrl+Cで抜けて下さい)

pause > nul

 

pauseで表示されるデフォルトは、キャンセルへの誘導文が書かれていないので、私はpause > nulにして、自分で文言をechoで書いてあげるようにしています。

 

ディレクトリの移動 cd

カレントディレクトリの移動。

@echo off
cd パス名

ちなみにユーザーディレクトリやデスクトップへの移動は

@echo off

rem ユーザーディレクトリ c:\Users\User
cd %UserProfile%

rem デスクトップ c:\Users\User\Desktop
cd %UserProfile%\Desktop

 

ファイルの移動 move

ファイルなどオブジェクトの移動。

@echo off
move 移動元 移動先

 

変数の使い方

もちろん変数も使えます。書き方は

set 変数名= 初期値

です。「変数名」と「=」の間は空けてはいけません。

こんな感じです。

@echo off
set NAME= HOGEHOGE

 

使い手の入力値を使いたい

プログラムの中で、使い手側に入力させたい時があります。

  • 名前を入力させて、その名前でアカウント名を作りたい。
  • 0や1を入力させ、その値によってプログラムを分岐させたい。

そういうとき、一旦プログラムを止め、使い手であるユーザーに入力させる方法です。

こう書きます。

set /p 変数名=

するとこの行でプログラムは停止し、画面上に入力のカーソルが表示されます。

pauseが無くてもプログラムはこの行でストップします。

ユーザーが値を入力してEnterキーを押すと、変数に値が入ります。

変数を使いたければ%で挟み下記のようにします。

%変数名%

変数を表示したければ

@echo off
echo %変数名%

とします。

こんな感じです。変数は日本語でもいいですが基本的に1バイト文字の英語が望ましいです。

指定した秒数間バッチを止める timeout

プログラムとプログラムの間隔を空けたいときに使います。

@echo off
timeout /t 秒数

 

IF文

もちろんIF文も書けます。

社員宛の電話を受けたときの文例です。

@echo off

echo.
echo 折り返しお願いします=ブランク
echo 電話があったことお伝えください=1
echo 追って連絡します= 2
echo.

set /p ANS=

if "%ANS%" equ "" (
echo 折り返しお願いします
) else if "%ANS%" equ "1" (
echo 電話があったことお伝えください
) else if "%ANS%" equ "2" (
echo 追って連絡します
) else (
echo エラー
)

 

その他

その他です。

引数を渡してバッチ実行する

バッチファイルをコマンドで実行するときに引数を与えられます。

これを使えばバッチファイルをまとめるバッチを作ってユーザー入力や条件分岐を使って色んなことができそうです。

こんな感じ。

test.bat ARIGATO SAYONARA

そして与えた引数をプログラムの中で、%数字%で使うことができる。

echo off

rem 1番目の引数(ARIGATO)
echo %1%

rem 2番目の引数(SAYONARA)
echo %2%

 

プログラム内からファイル名を取得する

尚、%0%と指定すればファイル名が取得できる。

echo %0%

 

一旦この辺で、気が向いたら続きを書きます。

尚、私が作ったセッティング用のプログラムは応用編として別記事で出すつもりです。

応用編を書きました。コードの実例です。

Windowsバッチプログラム セッティングを自動化せよ 応用編
前回に引き続き応用編になります。自動化できると知っただけでは意味がありませんので、大変おこがましくはございますが、私が使っているバッチをほとんどそのまま文例として載せます。 私はこのブログはリファレンスや教則本ではございませんので、この記事...

 

リファレンス本はこちらがオススメです。私はサッと引ける紙版を持っています。

 

ExcelVBAの記事はこちらです。よろしければご覧ください。

ExcelVBA 残業を無くしたい人に伝えたいExcelVBAの存在 エクセルプログラミング
簡単に自己紹介から 現在私は会社のIT部門でプログラムを書く仕事をやっていますが、約4年前は広島で営業補佐の仕事をやっていました。要するに事務職ですね。 広島というと地方になるのですが、地方の仕事は過酷です。都会と違って分業が完全ではないの...

コメント

タイトルとURLをコピーしました