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万円台で改善できた話を書いてみようと思います。複数のデバイスを使い分けている人や、デスク周りの配線にストレスを感じている人の参考になれば嬉しいです。 それまでの環境と抱えていた課題 僕はこれまで23インチのHPモニターを使っていました。USB-C 1本で給電と映像出力ができる便利なモデルで、当時は「これで完璧だ」と思っていたんですが、使っているうちにいくつか不満が出てきました。 給電能力の問題 最大の問題は給電能力でした。このモニター、45W給電に非対応らしく、Surface Go 2を充電できなかったんです。 Macbookは充電速度が落ちるにせよとりあえずは充電できるのに、Surfaceは全く充電されないので、結局、Surfaceを使うときは別途ACアダプターを繋ぐ必要があって、USB-C 1本で完結するという利点が活かせていませんでした。 ハブ機能の使いづらさ モニター自体にはハブ機能があって、USBポートもいくつか付いていたんですが
desk

実務で身についたAIとコーディングするコツ

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 仕事を楽にするために、プログラムによる自動化・効率化を日々実践しているのですが、最近ではもっぱらAIを使ったコーディングが中心になっています。想像以上に実用的で、正直なところ「もう戻れないかも」と感じているくらいです。 以前は、ブログ記事を書くときのAIの使い方をまとめましたが、今回は僕が本業で培った経験をお伝えできればと思います。 https://kalsari.net/tool/128 本記事では、AIツールを使った実際のコーディング経験から得た知見や、効果的な活用方法について共有します。「AIでプログラミングができるらしいけど、実際どうなの?」と気になっている方の参考になれば幸いです。 使っているAIツール 現在、メインで使用しているのはChatGPTです。特に理由があるわけではなく、最初に触れたのがこれだったからという、わりと適当な理由だったりします。 GitHub CopilotやCursorなどの有料ツールも試してみたんですが、現時点では自分の用途にお
develop

【Parsec】Mac→WindowsでIME切り替えを快適にする方法

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 MacからParsecを使ってWindowsにリモートアクセスして作業する機会が増えてきたのですが、地味にストレスだったのが日本語入力の切り替えなんですよね。 Macには「全角/半角」キーが存在しないので、リモート先のWindowsでIMEのON/OFFを一発で切り替えることができません。ドキュメント作成やコーディングなど、日本語と英語を頻繁に切り替える作業では、この小さな不便が積み重なって大きなストレスになっていました。 そこで今回は、Karabiner-ElementsとGoogle日本語入力を組み合わせて、Mac側の「英数」「かな」キーでリモート先WindowsのIMEを快適に操作できるようにする方法を紹介します。同じ悩みを抱えている方の参考になれば幸いです。 解決方針の全体像 今回の設定は、以下の流れでキー入力を変換していきます: Mac: 英数/かなキー → Karabiner-Elementsで変換 → F15/F16キー ↓ Parse
tool