bat(Windowsバッチファイル)

概要:Windowsバッチファイル

コマンド

chcp で使用するコードページ

コードページ識別子(一部抜粋)
識別子 .NET Name 追加情報
437 IBM437 OEM United States
932 shift_jis ANSI/OEM Japanese; Japanese (Shift-JIS)
1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
1252 windows-1252 ANSI Latin 1; Western European (Windows)
12000 utf-32 Unicode UTF-32, little endian byte order; available only to managed applications
12001 utf-32BE Unicode UTF-32, big endian byte order; available only to managed applications
20127 us-ascii US-ASCII (7-bit)
20932 EUC-JP Japanese (JIS 0208-1990 and 0212-1990)
50220 iso-2022-jp ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
50221 csISO2022JP ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
50222 iso-2022-jp ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
51932 euc-jp EUC Japanese
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)

prompt

概要:DOSのコマンドプロンプトでフルパス表示の変更
C:\Path\to\name>prompt $N$S$G

C >

which.cmd

概要:引数のファイル名からパスを表示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
@echo off
VER | find "XP" > nul
IF not errorlevel 1 GOTO Win_XP

where %*
goto end

:Win_XP
for %%I in (%1 %1.com %1.exe %1.bat %1.cmd %1.vbs %1.js %1.wsf) do if exist %%~$path:I echo %%~$path:I

:end

touch.cmd

概要:引数のファイルが存在しない場合は、空のファイルを生成し、既に存在する場合は、更新日時を更新する
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@echo off
if %1.==. goto end
if not exist %1 goto create
copy /b %1 +,, > nul
echo %1 touched!
goto end

:create
type nul > %1
goto end

:end

変数の展開

文字列の展開

概要:文字列の取扱い
文字列の切り出し
変数 概要
%STRING% 変数STRINGの値全体
%STRING:~m% m文字目から、最後まで
%STRING:~m,n% m文字目から、n文字分
%STRING:~m,-n% m文字目から、最後のn文字分を除いたもの
%STRING:~-m% 後ろからm文字目から、最後まで
%STRING:~-m,n% 後ろからm文字目から、n文字分
%STRING:~-m,-n% 後ろからm文字目から、最後のn文字分を除いたもの
%STRING:s1=s2% 文字s1を文字s2に置換する。

YYYYMMDDHHMMSS形式の現在日時

@echo off

set dt=%date%
set tm=%time: =0%
if "%tm:~0,5%"=="00:00" set dt=%date%
echo %dt:~-10,4%%dt:~-5,2%%dt:~-2,2%%tm:~0,2%%tm:~3,2%%tm:~6,2%

バッチ スクリプトの引数参照 (%0、%1 など) の展開

概要:パスの取扱い

実行されているバッチファイル名

set BAT_NAME=%~n0

実行されているファイルが置かれているカレントディレクトリー

set BAT_HOME=%~dp0

詳細(ヘルプ)

> call /?

→以下が表示される

また、バッチ スクリプトの引数参照 (%0%1 など) の展開は、次のように
変更されました:

%* バッチ スクリプト内では、すべての引数 (%1%2%3%4%5 など) を参照します。

バッチ パラメーター (%n) の置換は拡張されました。次のオプション構文
を使うことができます:

    %~1         - すべての引用句 (") を削除して、%1 を展開します。
    %~f1        - %1 を完全修飾パス名に展開します。
    %~d1        - %1 をドライブ文字だけに展開します。
    %~p1        - %1 をパスだけに展開します。
    %~n1        - %1 をファイル名だけに展開します。
    %~x1        - %1 をファイル拡張子だけに展開します。
    %~s1        - 展開されたパスは、短い名前だけを含みます。
    %~a1        - %1 をファイル属性に展開します。
    %~t1        - %1 をファイルの日付/時刻に展開します。
    %~z1        - %1 をファイルのサイズに展開します。
    %~$PATH:1   - PATH 環境変数に指定されているディレクトリを検索し、
                   最初に見つかった完全修飾名に %1 を展開します。
                   環境変数名が定義されていない場合、または
                   検索してもファイルが見つからなかった場合は、
                   この修飾子を指定すると空の文字列に展開されます。

修飾子を組み合わせて、複合結果を得ることもできます:

    %~dp1       - %1 をドライブ文字とパスだけに展開します。
    %~nx1       - %1 をファイル名と拡張子だけに展開します。
    %~dp$PATH:1 - PATH 環境変数に指定されているディレクトリを
                   検索して %1 を探し、最初に見つかったファイル
                   のドライブ文字とパスだけに展開します。
    %~ftza1     - %1 を DIR の出力行のように展開します。

上の例の %1 と PATH は、他の有効な値で置き換えることができ
ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
は %* と同時には使用できません。