Windowsバッチのチートシート

  技術情報

変数

%0 バッチのフルパスが設定されている。
バッチの置かれているカレントディレクトリは、%~dp0
常にバッチが置かれているディレクトリをカレントディレクトリにしたいときは下記のようにする。
cd /d %~dp0
%1,%2,%3,... 指定された引数が設定されている。
forで%*を使うと%1以降の全ての引数が参照できる。
コマンドライン引数を順次参照したいときに便利。
for %%f in (%*) do (
    echo %%f
)
%cd%

現在の作業中のディレクトリ

変数の加工

%ymd:~0,4% substr相当。
変数ymdの0文字目から4文字を切り出す例。ymdに20201231が入っていた場合は2020が切り出される。
%ymd:~-4,2% 応用編。
マイナス値の場合は末尾から数える。ymdが20201231なら1231の頭2文字、12が切り出される。
%ymd:-4,-1% 応用編2.
第二引数がマイナス値の場合は末尾n文字が捨てられる。ymdが20201231なら1231の末尾1文字か捨てられ123が切り出される。
%ymd:0=o%

置換。
例は”0″を”o”と置き換える意味。ymdが20201231なら、2o2o1231になる。

特殊文字の記述

  記述方法
TABコード テキストエディタの場合はそのままTABコードを記述すればよい
ダブルクォート

“”

文字入力

set /p 変数名=メッセージ

使用例 @echo off
set user_age=
set /p user_age=年齢を入力してください...
echo あなたの年齢は %user_age% 才です.
実行結果 年齢を入力してください...22
あなたの年齢は 22 才です.

改行の出力

echo. または echo; または echo:

一時停止

pause 「続行するには何かキーを押してください . . .」
と表示して何か入力があるまで停止する。
timeout

「■ 秒待っています。続行するには何かキーを押してください …」と表示し、指定の秒数停止する。
例)timeout /t 5  5秒間経過 or 何かキーが押されたら続行する。
例2)timeout /t 3 /nobreak  「■ 秒待っています。終了するには CTRL+C を押してください …」と表示し、3秒間停止する。

非同期実行

通常は実行ファイル名だけ書くところを、startコマンドを使うと非同期実行となる。

使用例 start notepad.exe

呼び出し方と終わり方

exit [結果コード] 呼出元の親バッチも道連れに終了する。
exit /B [結果コード] /Bオプションを付けると呼出元に処理を戻しつつ、結果コードを返す。
呼出元で %ERRORLEVEL%で 結果を評価できる。
cmd /C piyo.bat Bオプションなしで作られたバッチの結果コードを得たいときは、cmd /C コマンドで呼び出す。
call piyo.bat
cmd puyo.bat
普通に子バッチを呼び出すときは、call や cmd コマンドを使う。

ディレクトリの移動

pushd ディレクトリの移動。
UNCパス(共有フォルダ)上でも移動ができる。
※cdコマンドでUNCパスへ移動できない。
popd pushdとセットで使う。pushdで移動する前のディレクトリに戻る。
一時的にディレクトリを移動するときに便利。

強制コピー

copy /y メッセージも不要ならnulへリダイレクトする。
copy /y > nul

ステートメント

if (式) コマンド

条件判断を行う。(式)がtrueのとき、コマンドを実行する。
コマンドが複数に渡る場合は、goto文を使って実現する。

式の例(1)ファイルが存在するか

exist %1
if exist foo%1.txt goto skip
 copy foo.txt foo%1.txt
:skip

式の例(2)文字列比較 '%1'=='a'
式の例(3)否定 not '%1'=='a'

goto (ラベル)

指定ラベルの書かれた行へジャンプする。
ラベルは、コロン(:)で始まる英字で指定する。

goto proc1
echo 実行されない

:proc1
exit

call (ラベル) (引数…)

指定ラベルの書かれた行へジャンプ
引数も一緒に渡すことができる。
call hello john
:hello
echo Hello, %1 !
exit /b

call (バッチファイル名)

バッチの呼出もできる。

コードページ

コマンドプロンプトはコードページMS932(≒ShiftJIS)がデフォルトですが、必要に応じてコードページを変更できる。
呼び出すプログラムの出力がUTF-8固定といった場合に、事前に切り替えておくと文字化けしない。

chcp

現在のコードページを表示する。

chcp 932

コードページをMS932にする。

chcp 65001

コードページをUTF-8にする。

 

LEAVE A COMMENT