お久しぶりです。PiTaPa履歴から利用統計を作るbatファイルを改良したので忘備録を兼ねて解説します。
初回は核心(革新)的なことではなく、全体的な文構造についてです。
バッチファイルをクリックしただけで実行しても良かったのですが、最初に準備することを説明して、準備ができたかを確認してから実行するようにしました。とりあえず実行部分がどこかを確認できればと思います(構文自体は簡単だと思います)
まずは全体像を
「
@echo off
echo このバッチファイルはPiTaPaの履歴csvファイルから京阪線に乗った距離を計算するものです。
echo 使い方:
echo PiTaPa倶楽部のご利用明細からCSVファイルをダウンロードしてください。
echo 履歴のCSVファイルが入ったフォルダにこのバッチファイルを入れてください。
echo そしたら、もう一度このバッチファイルを実行してください。
echo.
echo 準備はできましたか?(「Y」を押すと実行します。準備がまだの場合は「N」を押してください)
choice
if %errorlevel% == 1 (
echo 「PiTaPa履歴ver2.bat」を作成中です。
rem PiTaPa履歴ver2.txtを作成
>>PiTaPa履歴ver2.txt echo @echo off
>>PiTaPa履歴ver2.txt echo setlocal enabledelayedexpansion
>>PiTaPa履歴ver2.txt echo.
>>PiTaPa履歴ver2.txt echo set HidukeL=0
中略
>>PiTaPa履歴ver2.txt echo.
>>PiTaPa履歴ver2.txt echo echo 完了
rem PiTaPa履歴ver2.txt -> .bat
ren PiTaPa履歴ver2.txt *.bat
echo 「PiTaPa履歴ver2.bat」の作成が完了しました。
中略
echo 「PiTaPa履歴ver2.bat」を実行します。
call PiTaPa履歴ver2.bat
echo 「PiTaPa履歴ver2.bat」の実行が完了しました。
ren 199999.csv Kakikae.csv
echo 「星影.bat」を実行します。
call 星影.bat
echo 「星影.bat」の実行が完了しました。
ren Kakikae.csv 199999.csv
echo 「京阪距離時間_簡易版.bat」を実行します。
call 京阪距離時間_簡易版.bat
echo 「京阪距離時間_簡易版.bat」の実行が完了しました。
ren 京阪距離時間.csv Kakikae.csv
echo 「星影.bat」を実行します。
call 星影.bat
echo 「星影.bat」の実行が完了しました。
ren Kakikae.csv 京阪距離時間.csv
echo 「京阪統計.txt」を作成中です。
rem 京阪統計.txtを作成
>>京阪統計.txt echo setlocal enabledelayedexpansion
setlocal enabledelayedexpansion
findstr "京阪" 京阪距離時間.csv >仮.csv
set yearF=2099
for /f "tokens=1 delims=/," %%k in (仮.csv) do (
set year=%%k
if !year! geq !yearL! (
set yearL=!year!
)
if !year! leq !yearF! (
set yearF=!year!
)
)
>>京阪統計.txt echo for /l %%%%p in (!yearF!,1,!yearL!^) do (
endlocal
>>京阪統計.txt echo set YearNow=%%%%p
>>京阪統計.txt echo for /l %%%%q in (1,1,12^) do (
中略
>>京阪統計.txt echo del 京阪統計1.txt
>>京阪統計.txt echo del 仮.csv
rem 京阪統計.txt -> .bat
ren 京阪統計.txt *.bat
echo 「京阪統計.bat」を実行します。
call 京阪統計.bat
echo 「京阪統計.bat」の実行が完了しました。
echo 全ての工程の実行が完了しました。
echo 「京阪距離.csv」が出来上がったものですので開けてみてください。
echo ~完~
)else (
echo 準備ができたらまたこのバッチファイルを実行してみてください。
)
echo コマンドプロンプトを閉じるには何かキーを押してください。
echo 次の行に「続行するには何かキーを押してください . . .」と表示されますが、この続きは閉じるだけです。
pause
cmd /c
」
水色でマーカーをしたところが準備したかを確認する条件分岐の部分です。
「choice」コマンドは、「Y」を押すと、変数 %errorlevel% が「1」になり、「N」を押すと「2」になります。
次に、if文を使って条件分岐をします。「if %errorlevel% == 1 (」は変数 %errorlevel% が「1」ならば、次の行から対応する括弧までを実行します。ここでは「)else (」のとじ括弧になります。後半の「else (」の部分はさっきの条件「%errorlevel% == 1」でないとき、つまり変数 %errorlevel% が「1」でない、「2」のときにすることをこの次の行から対応する「)」までに書いています。
「
@echo off (余計な文字列が表示されないようにするために書きます)
序文(このバッチファイルを実行する前に準備することが書いてあります)
choice (「Y」を押すと、変数 %errorlevel% が「1」になり、「N」を押すと「2」になります)
if %errorlevel% == 1 (
(変数 %errorlevel% が「1」の時(準備ができている時)に行うこと、要するにこのバッチファイルの本文)
)else (
echo 準備ができたらまたこのバッチファイルを実行してみてください。
(変数 %errorlevel% が「2」の時(準備できていない時)に行うこと、この文章を表示するだけ)
)
pause (プログラムの一時停止。何かしらのキーを押すと再開します)
cmd /c (コマンドラインを閉じます)
」
こんな感じです