Windows バッチファイル メモ

変数セット

set hoge=hello world
(=の前後に空白入れない)

式の結果をセットしたい場合は
set /a

変数展開

echo %hoge%
(forで利用の場合%%)

ファイルへの書込み


上書き

>>
追記

パス

・バッチでよく使う”%~dpnx1″について

%0 :バッチファイル自身
%1 :ドラッグしたファイル
~  :ダブルクォートを除く
d  :ドライブ名
p  :パス名
n  :ファイル名
x  :拡張子

フルパス
%0

ファイル名(拡張子有)
%~n0%~x0

ファイル名(拡張子無)
%~n0

拡張子
%~x0

ディレクトリ
%~dp0

・使用例

自身のフォルダのパスを追加する。
set PATH=%~dp0;%PATH%

バッチと同じ場所にあるindex.htmlを開く。
start chrome %~dp0index.html

上の階層にあるファイルに書き込み。
set text=Hello World
echo %text%> %~dp0\..\_Path.txt

ファイル名を日付にする方法
set ymd=%date:~0,4%%date:~5,2%%date:~8,2%

文字コード

chcp xxx
Shift JIS:932
EUC-JP:20932
UTF-8:65001

for文

for オプション 変数1文字 in (対象) do コマンド
あるいは、
for オプション 変数1文字 in (対象) do (
コマンド
)
のように改行もできる。

Lオプション (値増加)
for /L %%i in (開始,増加量,終了) do

オプション無し(ファイル対象)
for %%i in (*.txt) do

Dオプション(フォルダ対象)
for /d %%i in (*) do

変数に付く%記号は、バッチで使う場合は%%、コマンドプロンプトからの場合は%となるので注意。また通常の環境変数とも違うので注意。

・forの中で変数展開する場合

setlocal enabledelayedexpansion~endlocal
で!を利用するできるが、ファイル名に!があると駄目。

サブルーチン化でも可。
for %%i in (*) do (
call :sub
)
pause
exit
:sub
exit /b

置換

変数名:置換対象の文字列=置換後の文字列
set p=%~dp0
echo datadir = %p:\=/% >> test.txt
のような感じ

for文の中での置換
for %%i in (*.mkv) do (
set x=%%i
set y=!x:mkv=mp4!
)

バッチファイルサンプル

arp -a xxx
IPアドレスとMACアドレスの対応のキャッシュを表示する。

echo off
結果のみ表示したい場合

・カレントディレクトリのファイル一覧

・カレントディレクトリの移動

・LameにWavを渡す

・Ping送信

・Pingでアドレスの一覧