⧉Windowsのバッチファイルのテクニックをご紹介します

# はじめに

日々、趣味のプログラムを書いたりして楽しんでいます。
そのような中でＷｉｎｄｏｗｓのバッチを頻繁に書いています。
バッチファイルは便利なのですが標準のＷｉｎｄｏｗｓ環境でできる事は限られており実現に悩むことも多いです。
ＰｏｗｅｒＳｈｅｌｌが強力なのは理解していますが標準のシェルではないのでスクリプトの起動も面倒だったりします。

最近ふと私が使用しているバッチのテクニックが以外と知られていないことに気づきました。
（※実際、ほとんどPowershellを利用しているのですが。。。）

そこでネット上を検索しても作成当時、見つからなかった。また、今でもなかなか見つからない。
そんな内容のバッチを中心に掲載させて頂きます。

基本的なテクニックについては@tomotagwork様の「[Windowsバッチまとめ][]」が非常に良くまとまっていて確認するのにちょくちょく拝見させていただいております。ありがとうございます。

※LGTM数を参考に順番を変えています。


# ◇メッセージウインドウを表示
![WS000000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588934/173837f2-f654-f9b2-706a-544d301d8af3.jpeg)
入力待機をさせる場合に「はい／いいえ」など単純なものはウインドウを表示してマウス操作のみで完結させたい場合がありますよね。

https://qiita.com/aromatibus/items/c1e7b27a8ba1ed07982b


# ◇トーストを使って通知する

![Toast.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588934/5a80e27e-ff14-5b64-f3f4-dea4b3ed7504.gif)

トーストを利用するとバッチを終了し閉じたあとでも通知に記録を残すことができます。

https://qiita.com/aromatibus/items/c3e25ec72a9bcaaf345c


# ◇管理者権限の付与（空白名対応版）
powershellを利用したテクニックは有名なのですが、引数の引き渡しに言及したものは見たことがありませんでした。
どうもファイル名、フォルダ名に空白を含むと誤動作をすることが原因だったようです。
私も指摘を受け空白が含まれているファイル名、フォルダ名に対応するものに作り直しました。
バグが残っている可能性はありますが掲載いたします。

https://qiita.com/aromatibus/items/7f216a96857c87125739


# ◇実行方法を判別する
エクスプローラーまたはコマンドからの起動を判別できると色々と応用が利きます。

2022/08/17
終了処理を最近、使っているものに書き換えました。

https://qiita.com/aromatibus/items/2057298fde81e84c39b1


# ◇Robocopyによるバックアップを簡単に使う
Robocopyが非常に優秀なのはご存じのとおりです。
当然、大勢の方がラッパーを作っていますので今更感はありますがサクっと使えるものが見当たらず自作したものです。
今回はQiitaに掲載できるよう見やすいように修正、トーストに終了通知を加えたりしています。

https://qiita.com/aromatibus/items/11387cd4c460665d1eae


# ◇ドライブかファイルかフォルダかを判別する
バッチファイルにファイルやフォルダをドラッグアンドドロップして処理する時に、ドロップされたものがドライブかフォルダかファイルかを判別します。

https://qiita.com/aromatibus/items/465ab903059a4658ffc4


# ◇カレントフォルダ名を取得する
バッチファイルにファイルやフォルダをドラッグアンドドロップして処理する時に、ドロップされたパスの最後のフォルダとなるカレントフォルダを取得します。

例えば
`C:\AAA\BBB\CCC\DDD.txt`から`CCC`を取り出します。

https://qiita.com/aromatibus/items/8075514b134b2f0424b7


# ◇空きドライブを検索

https://qiita.com/aromatibus/items/19419250fbee9200ee04


# ◇仮想ディスクを作成、最適化する
仮想ディスクはサーバーの運用に限らず様々な場面で管理がしやすく有効です。

https://qiita.com/aromatibus/items/028abe700d876eb83466


# ◇日時を好みのフォーマットで作成
バッチファイルの中で日付や曜日、時刻を表示したい時がありますが自由なフォーマットにするのは案外難しいです。
次の方法なら見た目にもシンプルで自由度が高いのでお勧めです。

https://qiita.com/aromatibus/items/da51080676937a46a2fa


# ◇Windowsのバッチファイルでラップタイム（実行時間）を計測する
ＰＣやプログラムなどの実行時間を計測したいときに使用できるバッチファイルです。
Ｐｙｔｈｏｎ実行用のバッチファイルに仕込んでいたものを独立させて使えるようにしました。
案外使い道は広くできたと思います。

https://qiita.com/aromatibus/items/25832040b97bbd426c3b


# ◇Beepや音楽を鳴らす
様々な方法がありますのでまとめて紹介します。
PowerShellを使うと好きな音楽を奏でることもできます。

https://qiita.com/aromatibus/items/4b9a38eb9705ca4c6d57


# ◇エスケープシーケンスによる画面制御
カラーコードなど制御文についてはマイクロソフトの「[コンソール仮想端末シーケンス][]」をご覧ください。

サンプルではカラーグラデーションのシミュレーションも載せています。
最後は白になるようにしていますがこんな感じのを表示します。
![Visible light](https://upload.wikimedia.org/wikipedia/commons/c/cc/Spectrum.svg)

https://qiita.com/aromatibus/items/7ff3a4278b90cac612b0


# ◇入力された値が数値か確認する
サンプルのみ掲載します。

https://qiita.com/aromatibus/items/5a2fb6ae78f197bf3d2c


# ◇複数行のコメントについて
コメント記述は通常"[rem][]"ですが、そのほかに"::"が利用できます。

https://qiita.com/aromatibus/items/dc87f672708eb20fd054


# おわりに

他のバッチファイルもお見せできるレベルに修正できたら掲載したいです。
お粗末様でした。


[⧉Windowsのバッチファイルのテクニックをご紹介します]: https://qiita.com/aromatibus/items/12fa4775f38c9889a686
[携帯環境作成支援スクリプトMECSS]: https://github.com/Aromatibus/MECCS

[Windowsバッチまとめ]: https://qiita.com/tomotagwork/items/5b9e08f28d5925d96b5f

[rem]: https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/rem
[DOSバッチファイルの複数行のコメント]: https://www.web-dev-qa-db-ja.com/ja/batch-file/dos%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%A4%87%E6%95%B0%E8%A1%8C%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88/941134090/

[コンソール仮想端末シーケンス]: https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

[PowerShellでビープ音の「ドレミの歌」を奏でてみよう]: https://tech.guitarrapc.com/entry/2013/02/05/000226

[【初心者向け】Windows10でUSBメモリを暗号化する【テレワーク】]: https://qiita.com/ronkabu/items/bdee0480475befa77186
[SDELETE]: https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
[Ｗｉｎｄｏｗｓの拡張子「.cmd」ファイルと「.bat」ファイルの違い]: https://urashita.com/archives/13383
[Difference between CMD and BAT]: https://copyprogramming.com/howto/difference-between-cmd-and-bat
[Windows batch files: .bat vs .cmd?]: https://stackoverflow-com.translate.goog/questions/148968/windows-batch-files-bat-vs-cmd?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc
[Windowsでshebangもどき、またはバッチにスクリプトを埋め込む方法]: https://qiita.com/snipsnipsnip/items/50e4ca88e3ce3f8cffda
[HDDやSSDなどのデータを完全消去する方法と消去方式の規格]: https://onoredekaiketsu.com/how-to-completely-erase-data-such-as-hdd-and-ssd/
[データの完全消去(wikipedia)]: https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%AE%8C%E5%85%A8%E6%B6%88%E5%8E%BB