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アプリのカスタマイズやプラグイン開発が得意分野です。
好きなビールは一番搾り。

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

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

ブログ下書きのしくみ(改)を作りました

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 以前書いた記事 で紹介したやり方を発展させて、ブログの下書きを作るしくみを作りました。 中身としては、Notionにある情報を元にして、Pythonでフローを組み、その中からAI部分としてCodexをCLIで実行させる形です。これまではまだ自分でやらなきゃいけない作業が多かったですが、それをより自動化したしくみ、という位置づけです。 Notionを起点にした下書きフロー 今回のしくみでも、Notionをフローの中心に据えています。 以前と変わらず、ブログ記事の材料になるメモはNotion側にあり、それを元に下書きを作る流れです。メモをそのまま記事にするのではなく、記事として読める本文に変換する部分をAIに任せる形にしています。 全体としては、ざっくり次のような役割分担です。 Notion: 記事の元になるタスクやメモを置く Python: 下書き生成の処理フローを書く Codex CLI: AIでMarkdown本文を生成する ルール: 記事の書き
AI

【レビュー】UGREEN エルゴノミクスマウス

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 僕はPCを使う時は断然トラックパッド派です。特にメインPCはMacbook Proですが、トラックパッドの使い心地でMacを選んでるまであるくらい(もちろん他にも理由あるけど)。 そんな僕ですが、この度マウスを購入しました。 出典:Amazon 今回は、トラックパッド好きの僕がマウスを導入した経緯と、実際に使ってみた感想を正直に書いていきます。 僕の普段の作業環境 まず前提として、僕のトラックパッド愛 作業環境を説明しておきます。 家で作業する際は、MacBookの内蔵キーボードの上に Huntsman Mini という60%キーボードを乗せる、いわゆる「尊師スタイル」で使っていて、ポインタ操作は基本的にMacBookのトラックパッドです。 「キーボードの上にキーボード?」と思われるかもしれませんが、これが意外と快適でして。Huntsman Miniの軽快な打鍵感を楽しみつつ、トラックパッドだけはMacのものをそのまま使える、という構成です。 Macのトラ
review