Kalsarikannint

お問い合わせ

サイト内検索

Windowsバッチファイルの作成Tips|タイトル設定と管理者権限の自動昇格

こんにちは。Kalsarikannintのフロントエンド担当・daiです。

最近、社内の定型業務をWindowsバッチファイル(.bat)で自動化する機会があったんですが、使ってみると「なんか微妙に使いにくいな」と感じる場面がちょこちょこ出てきました。

少し工夫するだけで運用時のストレスがぐっと減ったので、今回はそのTipsを2つご紹介しようと思います。

そもそも、どんな「使いにくさ」が起きていたのか

まず前提として、僕が直面していた状況はこんな感じでした。

  • 複数のバッチファイルを同時に動かしていたので、タスクバーが「コマンドプロンプト」だらけになっていた
  • 管理者権限が必要な処理を含むバッチを、うっかりダブルクリックで起動してエラーになってしまっていた

どちらも「仕組みを理解していれば防げるミス」なんですが、毎回気をつけるのも面倒ですよね。なので、バッチファイルの書き方自体で対処できないか考えてみました。

1. 実行中のバッチを識別しやすくする「title」コマンド

困っていたこと

複数のバッチファイルを並列で実行していると、タスクバーが「コマンドプロンプト」という名前のウィンドウで埋め尽くされてしまいます。

どれがどの処理をしているのか一切わからないんですよね。誤って関係ないウィンドウを閉じてしまったり、「あれ、このバッチ終わったっけ?」と二度見したり…。

解決策:1行目に title コマンドを入れる

バッチファイルの冒頭に title コマンドを書くだけで、ウィンドウのタイトルバーに任意の名前が表示されるようになります。

@echo off
title 【実行中】ログ転送バッチ(サーバーA)

たったこれだけです。タスクバーやウィンドウのタイトル部分に指定した文字列が表示されるので、複数起動していても一目でどれが何の処理かわかるようになります。

ちなみに、処理のフェーズに応じてタイトルを動的に変えることもできます。

@echo off
title 【準備中】バックアップ処理
:: 前処理...

title 【実行中】バックアップ処理
:: メイン処理...

title 【完了】バックアップ処理
echo 処理が完了しました。
pause

こうしておくと、「今どこまで進んでいるか」がタスクバーを見るだけでわかるので、特に時間のかかる処理のときに重宝します。

2. 管理者権限への自動昇格スクリプト

困っていたこと

システム環境変数の書き換えや、特定のシステムディレクトリへのファイル操作など、管理者権限が必要な処理を含むバッチファイルを使うとき、毎回「右クリック → 管理者として実行」をしていました。

これ、地味に手間なんですよ。しかも慣れてくると、うっかり普通にダブルクリックしてしまって、処理が途中で失敗する…という事故が起きやすくなります。

解決策:自分自身を管理者として起動し直すコードを先頭に入れる

バッチファイルの冒頭に「権限チェック → 足りなければ自分を昇格して再起動」というコードを仕込んでおくと、ダブルクリックするだけで自動的にUAC(ユーザーアカウント制御)のダイアログが表示されるようになります。

@echo off
:: 管理者権限のチェック
openfiles >nul 2>&1
if %errorlevel% neq 0 (
    echo 管理者権限がありません。昇格して実行し直します...
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

:: ここから管理者権限が必要な処理を記述
title 管理者実行:システム設定更新
echo 現在、管理者権限で実行されています。
pause

仕組みをざっくり解説

少し補足しておきます。ポイントは3つです。

① openfiles コマンドで権限をチェックする

openfiles は管理者権限がないと実行に失敗するコマンドです。これを利用して、%errorlevel%(コマンドの終了コード)が 0 でなければ「管理者権限なし」と判断しています。>nul 2>&1 は出力を捨てるおまじないですね。

② PowerShell の Start-Process で自分自身を昇格起動する

-Verb RunAs というオプションを指定することで、「管理者として実行」する動作をスクリプトから呼び出せます。%~f0 は「このバッチファイル自身のフルパス」を表す特殊変数です。

③ 元のプロセスは exit /b で終了させる

昇格した新しいプロセスが起動したあと、権限のない元のプロセスはそのまま終了させます。これをしないと、ウィンドウが2つになってしまうので注意です。

小さな工夫で「めんどくさい」を減らす

今回ご紹介した Tips をまとめると、こんな感じです。

やりたいこと解決策
複数バッチを識別したいtitle コマンドでウィンドウ名を設定
毎回の「管理者として実行」を省きたい冒頭に自動昇格スクリプトを追加

どちらも数行追加するだけで導入できます。テンプレートとして手元に持っておくと、次回バッチを書くときにコピペするだけで済むので、ぜひ活用してみてください。

運用時の視認性や実行の手間を少し意識しておくだけで、日々のちょっとしたストレスがかなり減ります。手作業でやるにはめんどくさい処理のためにバッチを書くと思うので、バッチを実行するときにめんどくさいことが増えたら本末転倒かなと思っています。なので、バッチは快適に実行できることを念頭に書くことを意識しています。

今後もまた何か便利なTipsがあれば書いていこうと思います。

Author dai

地方に住みながら、フルリモート情シスおじさんしてます。
フロントエンド開発とkintoneアプリのカスタマイズやプラグイン開発が得意分野です。
好きなビールは一番搾り。

KRUPS by T-falの全自動コーヒーメーカーが、毎朝2杯のコーヒー生活を救ってくれそうで気になっている

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 平日は毎朝、妻用と僕用にコーヒーを2杯淹れています。 それ自体は嫌いではないんですが、豆を挽く、お湯を沸かす、30秒蒸らす、淹れる... という工程が毎日あります。しかも2人分。 そんな中で気になっているのが、KRUPS by T-falの全自動コーヒーマシン「コーヒークラッシュ エクスペリエンス」です。 豆と水をセットして、豆挽きから抽出まで自動。しかもエスプレッソも淹れられる。これは朝のルーティンをかなり楽にしてくれるのでは……と思いつつ、税込70,000円。欲しい。でも7万円。 我が家の朝コーヒー事情 我が家では、平日の朝に妻用と僕用でコーヒーを分けて用意しています。 妻は出社しているので、コーヒーはKINTOのトラベルタンブラーへ。僕はフルリモートなので、家でバカでかタンブラーに入れて飲んでいます。 妻用は妻用で調整していて、僕用は僕用でだいたい固定メニューがあります。これを毎朝やっているので、全自動コーヒーメーカーが気になってくるわけです。
research

改!広告収益分配ツールを改善してみた

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 約1年前、Google AdSenseの審査に通過したタイミングで、このKalsarikannint運営2人がケンカしないために「広告収益分配ツール」を作りました。 祝!AdSense通過!広告収益分配ツールを作ってみた 仕組みとしては、Google Analyticsから月次のページ別PVを取得し、AdSenseの売上金額を取得して、執筆者ごとのPV割合で収益を分配するというものです。すべてGoogle系のサービスで完結するので、Google Apps Scriptでスプレッドシートに集計する形にしていました。 v1の課題点と改善策 ただ、実際に運用する前提で見直してみると、いくつか気になるところがありました。 レポートが見づらい スプレッドシートで、まっさらなシートにレイアウトも含めてすべてGASで描画させていたので、面倒くさくて凝ったデザインにしていなかったのが原因です。 今回からは、テンプレートのシートをあらかじめ作っておき、それをコピーして月ごとのシー
develop

ミニカーをかっこよく飾りたい

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 僕は車が好きで、過去には2代連続でスカイラインに乗っていたりしました。 ただ、いまは駐車場の都合や経済面を考えると、自分の車を所有するのはなかなか現実的じゃないなーと諦めてます。 ということで、乗れないなら、せめて乗りたい車のミニカーを集めて、かっこよく飾って、眺めてニヤニヤしたい。今回はそのために、デスク横に趣味棚を作りたい、という話です。 いまのミニカー置き場が雑すぎる 現状、ミニカーはいくつか持っています。 ただ、飾っているというより、机にポンって置いているだけです。これはこれで見える場所にあるので悪くはないのですが、どうしても「コレクション感」はありません。 せっかくなので、ただ置く場所ではなく、ちゃんと飾る場所を作りたいです。 アクリルケースに入れることを考える スカイラインクーペの方は元々アクリルのカバーに覆われていますが、トミカプレミアムのスープラは車体がむき出しです。このままではホコリも気になるし、掃除も少々手間なので、まず考えてい
desk