Win Batch よちよち開発 IoTデータ送信のために

ちょっとしたことで、バッチプログラムをつくる機会がありました。
バッチはホボ初心者ですが、少しずつ慣れていきたいですね。
 
1.業務要求
  IoTのデバイスが、取得したデータを、クラウド上のサーバへ送信するとき、
 WiFiが使えない場合があります。その時は、一時的にデバイスCSVファイルとして保存し
 あとでWiFiがつながると、クラウドへ送信する。という使い方をしています。
  しかし 業務終了時や、デバイスのクローズ時に、デバイス内のCSVファイルが
 残った状態では、クラウド上のサーバデータが異常値になります。
 それを回避するために、デバイス内で定期的、そして終了前に 未送信のCSVが存在するか
 チェックする必要が生じました。
  以下 はその バッチプログラムです。
2.プログラムのポイント
 ①PCの MyDocument は PCごとのフォルダパスが異なります。
 それを 共通にするために
  %USERPROFILE% という関数を使います。
 例 SET fil=%USERPROFILE%\Documents\AAAA\BBBB
 
 ②存在数を確認し、>0 のときと =0 のときでメッセージを変える
  Excel vba だと if n >0 then ですが、
 バッチでは iif %n% gtr 0 というように gtr という比較演算子をつかいます。
 
equ 等しい
neq 等しくない
gtr より大きい
geq 以上
leq 以下
lss より小さい(=未満)
 
3.プログラム例
--------------------------------
@echo off
rem 'CSV存在チェックプログラム
rem MyDocument の 指定フォルダをfil にエントリ
rem %USERPROFILE% でMyDocument を指定
SET fil=%USERPROFILE%\Documents\AAAA\BBBB
SET /a n=0
cd /d %fil%
for %%A in (*.csv) do ( if exist %%A (set /a n=n+1) )
if %n% gtr 0 goto CODEY
if %n% equ 0 goto CODE0
exit /b
:CODEY
@echo off
timeout 1 && echo%n%個の未送信があります
rem 未送信のときは 画面を停止する
pause
exit /b
:CODE0
@echo off
timeout 1 && echoOKです。未送信はありません
rem OK のときは 3秒後に終了する
timeout 3
exit /b

4.再利用
 上は フォルダ内を検索する 基本になり、いろいろ応用できる
 また ファイル数 n を 結果で返す Function もつくれる
以上