skip to content
barorin&

Windowsのバッチとスクリプトの書き方|Yes/no分岐・画面を閉じない・エイリアス

/ 6 min read

Table of Contents

はじめに

Windowsで定型作業を自動化しようとすると、バッチファイルかPowerShellを書くことになります。どちらも普段使わないので毎回書き方を忘れるのですが、実際に必要になった処理をまとめました。

実行後にコマンドプロンプトを閉じない

バッチファイルをダブルクリックで実行すると、処理が終わった瞬間にウィンドウが閉じてしまい、結果もエラーも読めません。

最後のコマンドの前に cmd /k を付けると、実行後もウィンドウが残ります。

Terminal window
cmd /k cd C:\hoge\fuga

/k は「コマンドを実行した後もコマンドプロンプトを継続する」という意味です(/c だと実行後に終了します)。

バッチファイルでYes/no分岐を作る

実行前に確認を挟みたいときのパターンです。

Terminal window
@echo off
:RESTART
set /p yn="処理を実行しますか?(Y/n): "
if /i "%yn%"=="y" (
rem Yesの場合の処理
echo 実行します
) else if /i "%yn%"=="n" (
rem Noの場合の処理
echo 中止します
exit /b
) else (
echo YかNで回答してください
goto RESTART
)
pause

書き方のポイントは3つです。

  • **"%yn%" とダブルクォートで囲む。**囲まないと、何も入力せずEnterを押したときに変数が空になり、if ==y という不正な構文になって構文エラーで落ちます。
  • **/i を付ける。**大文字と小文字を区別しなくなるため、Y でも y でも受け付けられます。
  • **goto で先頭に戻す。**想定外の入力のときに、やり直しをさせられます。

PowerShellで引数付きのエイリアスを登録する

Linuxのbashでは alias ll='ls -la' のように引数込みで登録できますが、PowerShellの Set-Aliasコマンド名しか登録できません。引数を渡したい場合は、エイリアスではなく関数を定義します。

プロファイルを開きます。

Terminal window
> notepad $PROFILE

関数を書きます。

Terminal window
# 引数なしのショートカット
function .. {
cd ..
}
# 任意の引数をそのまま渡す
function dc {
docker compose $args
}
# 引数が不要なら Set-Alias でよい
Set-Alias -Name v -Value nvim

$args には、呼び出し時に渡された引数がすべて入ります。dc up -d と実行すれば、docker compose up -d が実行されます。

おわりに

バッチファイルは、変数をクォートで囲むかどうかだけで挙動が変わるのが厄介なところです。分岐を書くときは、何も入力せずEnterを押した場合を必ず試しておくと、想定外のエラーを避けられます。

この記事を書いた人

barorinのプロフィール画像

barorin公認会計士

会計とITの二足のわらじで働く公認会計士です。Pythonを中心に、会計・監査の実務で実際に使っているコードや、Ubuntu・Raspberry Piの設定メモを書いています。