バッチファイルのあるディレクトリへ移動する

ショートカットを作ってダブルクリックすると、カレントディレクトリが
バッチファイルとは違うため期待どおりの動作をしないことがある。
そんなときはコレをやればOK。
CHDIR /D %~dp0

タイトルバーにバッチファイル名を表示する
TITLE %~n0

現在の日付時刻でファイル名をつくる

ファイルのバックアップなどに便利
@set T=%DATE%-%TIME:~0,5%
@set T=%T: =0%
@set T=%T:/=%
@set T=%T::=%
@set BACKUPFILE=%T%.zip
@ECHO "%BACKUPFILE%"
(結果) "20070509-1113.zip"

バッチファイルで足し算

テキストファイルで簡易カウンタ
set A=0
if exist counter.txt set /P A=<counter.txt
set /A A+=1
echo %A% >counter.txt
type counter.txt
@pause

バッチファイルの変数

変数展開

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

数字変数 %0〜%9 は上記方法で展開できるが、他の英字変数は、このように %%変数 を利用する。
set X=C:\WINDOWS\NOTEPAD.EXE
for %%I in ("%X%") do set Y=%%~nI
@echo [%Y%]
(結果) [NOTEPAD]
PATH環境に指定されているディレクトリを検索し、 最初に見つかった完全修飾名に%Iを展開する。
for %%I in (bcc32.exe) do set BCC=%%~$PATH:I
@echo [%BCC%]
(結果) [c:\borland\bcc55\Bin\bcc32.exe]
ファイルから文字列を取り込んで処理する
for /F %%I in (application.pid) do @taskkill /PID %%I
他のコマンドの出力を取り込んで処理する
for /F "usebackq" %%I in (`whoami`) do set Y=%%I
@echo わたしは [%Y%] です。
for /F "usebackq" %%I in (`hostname`) do set Y=%%I
@echo このコンピュータは [%Y%] です。

1