揮発性のメモ2

知識をメモ書きしておく

カウンター表示バッチファイル

起動回数をカウントして表示する

@echo off
setlocal

rem カウンタープログラム
rem ファイルの数字をカウントアップして表示する
rem 日付が変わったらカウントをリセットする

rem ★カウンターファイル名
set FILENAME=count.txt


rem ■ファイル日付が今日じゃないならカウンターリセット
for %%i in (%FILENAME%) do set D=%%~ti
set FILEDATE=%D:~0,10%
if not "%FILEDATE%"=="%date%" echo 0 > %FILENAME%

rem ■ファイルの数値をカウントアップ
set /p COUNT=<%FILENAME%
set /a COUNT=COUNT+1
echo %COUNT%>%FILENAME%

rem ■カウンター表示
echo %COUNT%
for %%i in (%FILENAME%) do set D=%%~ti

ファイルの日付を取得するイディオム
変数 %%i からファイルの日時(YYYY-MM-DD hh:mm)が取り出せる

set FILEDATE=%D:~0,10%

変数の文字列を分割。ここでは先頭10文字を取得する。
詳細は set /? で見よう

if not "%FILEDATE%"=="%date%" echo 0 > %FILENAME%

文字列比較。 notで否定。 変数は""で囲う。
詳細は if /? で見よう
リダイレクトはif文全体ではなくthen節にのみかかる。

set /p COUNT=<%FILENAME%

set /p 変数名=[プロンプト文字列] で本来はユーザからの入力をとる。
ファイルをリダイレクトすることでファイル読込みとして使用。

set /a COUNT=COUNT+1

変数で数値演算したいときは set /a を使う
このときだけは%%で囲わなくてもいい

echo %COUNT%>%FILENAME%

ファイルに出力する。
%COUNT% > %FILENAME% のようにリダイレクト記号の前後にスペースをあけるとファイルにも空白が出力されるので注意する。(この例の場合空白が入っても問題はないが)
かといって %COUNT%> %FILENAME% のように片方だけスペース入れるとエラーになる