検証環境

  • Windows 10 Pro 64bit (22H2)
  • Windows 11 Pro (23H2)

バッチファイル(.bat)の書き方サンプル

よく書き方を忘れるので、自分が良く使うバッチファイルの書き方をここにメモっておく

コマンド丸見え防ぐ&カレントディレクトリをBATと同じ場所に

だいたいのバッチファイルの頭に付けとけば良いと思います

コマンドが丸見えになるのを防ぐ「@echo off」
カレントディレクトリをバッチファイルと同じ場所にする「cd /d %~dp0」

@echo off
cd /d %~dp0

一時停止

コマンドの実行を停止します、何かキーを押すと進みます

pause

画面に文字を表示

「@echo off」でコマンドを非表示にしていても
「ECHO」コマンドで指定した文字列は表示されます
下記であれば「ねこ大好き」と表示されます

@echo off

ECHO ねこ大好き

バッチファイルの実行を終了する

バッチファイルの実行をここで終了します
通常のgotoだと飛び先として同じ名前のラベルの配置が必要ですが、これはラベルが不要です

goto :eof

バッチファイルにドラッグ&ドロップした複数ファイル処理ループ

このバッチファイルにファイルをドラッグ&ドロップすると、そのファイルの数だけループが回ります
以下の例ではループ内の「echo %%q」により複数のフルパスファイル名が並んで表示されます
「%%q」変数にフルパスファイル名が入ります
ファイル名・フォルダー名に半角スペースが含まれている場合は「"」で囲われます

@echo off
cd /d %~dp0

for %%q in (%*) do (
  echo %%q
)

pause

管理者権限で実行しているかチェック

バッチファイルが管理者権限で実行されてるかどうかをチェックします
管理者権限が必要なバッチファイルの頭に付けると良いでしょう

@echo off
cd /d %~dp0

for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
  if "%%~i"=="BUILTIN\Administrators" set ADMIN=yes
  if "%%~i"=="Mandatory Label\High Mandatory Level" set ELEVATED=yes
)

if "%ADMIN%" neq "yes" (
  echo 管理者権限で実行されていません
  echo バッチファイルの実行を停止します
  pause
  goto :eof
)
if "%ELEVATED%" neq "yes" (
  echo 管理者権限で実行されていません
  echo バッチファイルの実行を停止します
  pause
  goto :eof
)

echo 管理者権限で実行されています

pause