Windows | |

Windowsバッチファイル (bat) のメモ

自分用。適当に追記。

  1. 基本
  2. 勝手にコマンドプロンプト閉じさせない
  3. コマンドプロンプトにコマンド表示させない
  4. bat自身のファイルパス・ディレクトリを取得する
  5. 変数を使う
  6. PATHに追記する
  7. ファイルが存在したら消す
  8. フォルダが存在したら消す
  9. ファイルを上書きコピーする
  10. ファイル・フォルダをそのままコピーする

基本

  • 文字コードは Shift_JIS にすること。
  • 改行コードは CR+LF ……と思いきや、LFだけでも大丈夫な感じがする。

勝手にコマンドプロンプト閉じさせない

pause

最後に pause を書くと、キー入力があるまでは閉じないでくれる。

結果を画面に表示するようなプログラムを実行するとき、結果を確認するのによく使う。

echo www
pause

cmd.exe /K

最後に cmd.exe /K を書くと、コマンドプロンプトが開いたままになり、続けて操作できる。

echo www
cmd.exe /K

例えば以下は PATH に追記してコマンドプロンプトを開いたままにするだけのスクリプト。

set PATH=C:\path\to\something;%PATH%
cmd.exe /K

コマンドプロンプトにコマンド表示させない

先頭に @echo off と書く。

@echo off
echo www
pause

bat自身のファイルパス・ディレクトリを取得する

%dpn0</code> でファイルパスを、<code>%dp0 でディレクトリを取得できる。

batファイル自身が C:\path\to\me.bat の場合…

@echo off
echo %~dpn0
echo %~dp0
pause
実行結果
C:\path\to\me
C:\path\to\

変数を使う

set {変数名}={値} で値をセットする。使うときは %{変数名}% と書くと使える。

値にスペースが入ってたりしても、特にクォートとかはしなくて平気。

@echo off
set aaa=www ww
echo %aaa%
pause
実行結果
www ww

PATHに追記する

setPATH の現在値に追加したいパスを結合してセットする。

set PATH=C:\path\to\something;%PATH%

ファイルが存在したら消す

exist でファイル・フォルダの存在チェックできる。del でファイルを消せる。

ファイルがあったら消す
set filaname=myfile.txt
if exist %filaname% (
	del %filaname%
)

フォルダが存在したら消す

exist でファイル・フォルダの存在チェックできる。rmdir でフォルダを消せる。

rmdir/S フラグを指定すると、フォルダの中身のファイルやサブフォルダごと全部消せる。/Q フラグを指定すると、削除の確認をスキップできる。

フォルダがあったら消す
set foldername=myfolder
if exist %foldername% (
	rmdir %foldername% /S/Q
)

ファイルを上書きコピーする

copy/Y フラグを指定すると、ファイルが存在してても確認せずに上書きする。

aaa.txtをbbb.txtに上書きコピー
copy aaa.txt bbb.txt /Y

ファイル・フォルダをそのままコピーする

xcopy で元の構造をそのままにコピーできる。

/I フラグを指定すると、コピー先のフォルダが存在しない場合に自動で作成してくれる。

/H フラグを指定すると、隠しファイルも完全にコピーする。

/E フラグを指定すると、コピー先に無いサブフォルダもコピーする。

/Y フラグを指定すると、ファイルが存在してても確認せずに上書きする。

aaaフォルダとその中身を全てbbbフォルダとしてコピーする
xcopy aaa bbb /I/H/E/Y