DOSのバッチ処理

敬遠されがちなDOSのバッチ(.bat)処理。実はいろいろ使えるんです。

@echo off
setlocal
rem メインルーチン
:main
    call :func "hoge"
    goto :eof
rem 関数
:func
    echo %1
    goto :eof

関数呼び出し。

for /F %%s in ('dir *.txt /b') do ren %%~fs %%~ns.xml

.txtを.xmlに変換。

%1 1番目の引数
%~1 1番目の引数の"〜"のダブルクウォーテーションを省く
%~d1 ドライブ名
%~p1 パス文字列
%~n1 ファイル名
%~x1 拡張子

ここらは一般的。他にも、

%~a1 属性文字列
%~t1 日付・時刻
%~z1 サイズ
%~$PATH:1 PATH環境に指定されているディレクトリを検索し、最初に見つかった完全修飾名に%1を展開

とか、

@echo off
set HOGE=hoge hogera hogega
echo %HOGE%
echo %HOGE:ho=su%
echo %HOGE:ho=%
echo %HOGE:~0,4%
echo %HOGE:~5,6%
echo %HOGE:~-6%

環境変数文字列いじり。上から置換、削除、抽出
あと地味なとこで、

echo]

改行

echo ^>

'>'を出す

if exist hoge.txt (
    echo ファイルある
) else (
    echo ファイルない
)

rem
if not exist hoge.txt (
    echo ファイルない
) else (
    echo ファイルある
)

ファイルの存在チェックとか

if defined hoge (
    echo 環境変数hogeが定義されている = %hoge%
)

環境変数が定義されているかどうか


スーパーpre記法にバッチもあるのがなんかいいね。