Windows でパスの通ったディレクトリに入れておくと捗るバッチファイル

個人的によく使うものを紹介してみる。バッチファイルの中身と解説付き。

どちらかといえば「こういうふうにしてバッチファイルを適宜置いてやると便利なので参考にしてね」の意味合いが強いかもしれない。

なお「パスに通す」の意味や手順などは解説しない。

TIPS

最初に全般事項を TIPS としてまとめておく。

ファイル名を指定して実行からでも使える

パスに通したバッチファイルは「ファイル名を指定して実行」からでも使える。本記事で言えば PC ロックの lock.bat は、「ファイル名を指定して実行」から呼ぶことが多いかもしれない。

(余談) 「ファイル名を指定して実行」については拙作ですが以下にまとめてます。

日本語を echo や title で表示する時は文字コードを SJIS にする

バッチファイル(を解釈して実行するコマンドプロンプト)のデフォルトの文字コードは SJIS なので、他の文字コードで日本語を書いていると、表示時に文字化けする。

======== 汎用的なもの ========

「b」で一つ上のディレクトリに移動する(BackのB)

b.bat

@echo off
echo %cd%
echo   VVV
cd ..
echo %cd%

肝は cd .. だけだが、移動前後がわかるように echo で出力している。ここは好みか。

「qq」で今開いているコマンドプロンプトを終了する

qq.bat

@echo off
exit

単に exit するだけだが、exit やら quit と打つよりも圧倒的に速いのでオススメ。

「pp」でプロンプトを「$ 」にする

pp.bat

@echo off
rem my favorite prompt
prompt $$ 

これは完全に私の好みだが、デフォルトのプロンプトは長くて気に入らない。

C:\Users\stakiran> ipconfig /all
^^^^^^^^^^^^^^^^^
ここが長くて気に入らない

私は短い表示の以下が好き。

$ ipconfig /all
^
たった一文字。短い。

「here」でカレントディレクトリをエクスプローラーで開く

here.bat

@echo off
explorer .

「lock N」で N 秒後に PC をロックする

lock.bat

@echo off
set n=%1
title %n%秒後にロック
timeout /T %n% /nobreak
rundll32 user32.dll,LockWorkStation

timeout コマンドは指定秒数だけ待つコマンド。/nobreak はキーを押しても復帰しないオプション。これ入れないと、うっかりキー押しちゃった時に timeout による待ちが終了してしまうすぐロックに入ってしまう。

rundll32 user32.dll,LockWorkStation はおまじない。user32.dll という Windows に備わってるデフォの DLL ファイルに、LockWorkStation という機能(関数)があって、それを呼び出している。

======== Git/GitHub 系 ========

「save メッセージ」でカレントディレクトリの変更を Git コミットする

save.bat

@echo off
setlocal
set /p commitmsg="input your commit message>"
if "%commitmsg%"=="" (
    echo A commit message is required.
    exit /b
)
pushd %cd%
echo saving...
git add -A
git commit -m "%commitmsg%"
popd

特にひとり Git や GitHub している場合、コミットは適当でいいのでなるべく端折りたい。私は save.bat を配置して save コマンドにて実現させた。以下解説。

setlocal は呼び出し元の環境変数を汚染しないための指定。「ここで環境変数定義しても、それはここのローカル限定ですよ」の意。

set /p で入力プロンプトを出しつつ入力を受け付ける。

で、pushd でカレントディレクトリに移ってから git コマンドを叩く。最後に popd でディレクトリを戻す。pushd と popd のくだりはややこしいが、

  • (1) save.bat のあるディレクトリ
  • (2) save.bat の呼び出し元ディレクトリ(カレントディレクトリ)

と、ディレクトリが二つあって、何もしないと (1) 基準で進んでしまうので、明示的に (2) にしているという意図がある。このように「カレントディレクトリはどこなのか、を明示的に指定してやる」と、バッチファイルの呼び出し時にハマりづらくなる。

「glog」でカレントディレクトリの Git ログを TortoiseGit ログダイアログで開く

glog.bat

@echo off
start "" "C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" prm=/command:log /path:"%cd%"

======== REST API 系 ========

「token」で GitHub の Personal Access Token をセットする

token.bat

@echo off
set PERSONAL_ACCESS_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REST API を叩くスクリプトを使う前に実行する。

もちろんトークン情報はプライベート情報なので扱いに注意すること。たとえば「俺が考えた最強の "パスに通しておきたいバッチファイル"」リポジトリをつくって、うっかりトークンを書いた token.bat をプッシュしちゃう、なんてことのないように。

余談だが、AWS で不正アクセス食らって請求を食らう件のトラブルは、大半がトークン(AWS用語でいうとアクセスキー)情報をプッシュしちゃったことが原因である。

「proxy」で今設定している HTTP_PROXY などを見る

proxy.bat

@echo off
echo Result of "set | findstr HTTP"
set | findstr HTTP

set コマンドは(本来は環境変数を設定するコマンドだが何も指定しないと)環境変数を一覧表示する。findstr は UNIX でいう grep。

「proxy1」でプロキシ設定1 を HTTP_PROXY などに設定する

proxy1.bat

@echo off
set HTTP_PROXY=http://(PROXY-SERVER-IP):(PROXY-SERVER-PORT)
set HTTPS_PROXY=https://(PROXY-SERVER-IP):(PROXY-SERVER-PORT)

proxy1 の名前は適宜工夫する。設定個数が少ないなら proxy1 とか proxy2 でも覚えられると思う。「proxy」という単語が打ちづらくて気に入らないなら「p1」とか「p2」でもいいかもしれない。

「proxyoff」でプロキシ設定をクリアする(HTTP_PROXY などをクリア)

proxyoff.bat

@echo off
set HTTP_PROXY=
set HTTPS_PROXY=

======== その他系 ========

「cm」でディレクトリブックマークツールを使う

cm.bat

すいません拙作ツールです。バッチファイル中身は長いので載せません。 GitHub へのリンクだけ。ちなみに 130L くらい。あと ブックマーク情報を cm.bat と同じディレクトリ内に txt で保存する こともご了承ください。

ちなみにこのツールは bashmarks に触発されてつくりました。

「hide」で指定ファイルを秀丸エディタで開く

hide.bat

@echo off
pushd %cd%
start "" "C:\Program Files\Hidemaru\HIDEMARU.EXE" %*
popd

まず秀丸エディタ(に限らずテキストエディタ全般)は、引数としてファイルパスを与えるとそのファイルを開くようになっているので、これを利用する。

pushd については「今開いているコンソールをカレントディレクトリにする」ために必要。というのも、これをしなければ「カレントディレクトリ = hide.batのあるディレクトリ」となってしまい、前者のディレクトリを指さないため、相対的にファイルパスを指定した時に見つけられなくなる。

start を使っているのは、ノンブロッキングで実行するため。これを単に "C:\Program Files\Hidemaru\HIDEMARU.EXE" %* としちゃうと、秀丸エディタを終了するまでこの DOS 窓が閉じられないため煩わしい。

最後の popd はおまじない。呼び出し先のバッチでカレントディレクトリを変えた時は、最後に popd でもとに戻すことを心がけておくとハマらない。

おわりに

コマンドプロンプトを使う機会が多い方は、このやり方で色々カスタマイズすると便利になるのでぜひお試しを。

他にもオススメのバッチファイルなどあれば教えて下さい!