バッチファイルメモ

バッチファイルの書き方をまとめる。

ファイルの拡張子

ファイルの拡張子は [.bat] 。

# sample.bat
@echo off
echo hello world
----
> hello world

コメント

コメントの書き方

rem [コメント]

// t.bat
rem コメントは表示しない
echo hello world
----
> hello world

変数

変数の設定

set 変数名=値

変数の取り出し

変数名を%で囲みます。

変数のクリア

set 変数名=

set a=10
echo %a%
set b=hello world
echo %b%
set a=
----
> a
> hello world

環境変数

環境変数の例。

環境変数 説明
%~dp0 カレントディレクト
%USERPROFILE% ユーザープロファイル
%computername% コンピューター名
%TEMP% TEMP ディレクト

引数

バッチファイルへの引数は %1,%2,%3 ~%9 を参照。%0 はコマンド名。

> sample.bat abc def
echo コマンド名 %0
echo 第1引数 %1
echo 第2引数 %2
--
> コマンド名 sample.bat
> 第1引数 aa
> 第2引数 bb

%~dp0 とは - [コマンドプロンプト・バッチ/Windows] ぺんたん info

制御

if 文

条件式

set name=sato
if %name%==sato (
    echo name match %name%
) else (
    echo name not match %name%
)
----
> name match sato

ファイルの存在チェック

if exist sample.txt (
    echo exist sample.txt
) else (
    echo not exist sample.txt
)
----
> echo exist sample.txt

空チェック

変数をダブルコーテーションで囲む。

set name=
if "%name%"=="" (
    echo name is empty
)
----
> name is empty

数値チェック

set num=10
if %num% equ 10 (
    echo num is 10
)
----
> num is 10

for

指定範囲

for /l %%i in (0,1,3) do echo %%i
----
> 0
> 1
> 2
> 3

ファイル一覧

カレントディレクトリを検索
for %%f in (*.*) do (
    echo %%f
)
----
ファイル一覧を表示
data フォルダ以下を検索
for %%f in (data/*.*) do (
    echo %%f
)
----
ファイル一覧を表示

Windowsでファイルリストを取得するコマンド | 秋拓技術学院

/R を指定して再帰的に検索
for /R %%f in (*.*) do (
    echo %%f            << フルパス
)
----
ファイル一覧を表示

goto

ラベルに移動。

:start
echo start
goto :end

echo skip   rem スキップされる

:end
echo end
----
> start
> end

遅延環境変数

if,for 文などに定義した変数の値を変更しても、定義した値から書き換わらない場合に対応するため遅延環境変数を使う。

setlocal enabledelayedexpansion     << 遅延環境変数
set a=1
echo %a%
if 1 == 1 (
  set /a a+=1
  echo !a!          << !で参照する
)
----
> 1
> 2

呼び出し

外部バッチ

call sample2.bat

サブルーチン

call :funcA
exit 0 << バッチを終了、コマンドプロンプトを終了

:funcA
    echo call funcA
    exit /b 0   << コマンドプロンプトを終了せず、呼び出し元に戻る