バッチファイル(*.bat)を用いてファイルから偶数行のみを別ファイルに書き出してみる

こんにちは、雑記ラビリンスです。

 

Windowsのバッチファイル(*.bat)ファイルはあまり書くことがないので必要になった時に書きっぷりを忘れてしまいます。今回はバッチファイルを用いてファイルから偶数行のみを別ファイルに書き出すコードを紹介していきます。

コード紹介

 とりあえずコードを記載します。

@echo off
setlocal enabledelayedexpansion
set num=0
for /f %%i in (%1) do (
    set /A num=num+1
    set /A amari=!num!%% 2
    if !amari! equ 0 echo %%i >> toridasi.txt
)

ポイントは2行目の setlocal enabledelayedexpansionです。これは「遅延環境変数の展開」というもので処理を実行するときに値に置き換えるというものです。

batファイルは実行時ではなくコード読み込み時に値に読み込まれるので2行目の設定がないと変数[num]には0が入りインクルメントがうまくいかないのです。

2行目の遅延環境変数の展開を使うことで処理の実行時に値が入るのでインクリメントが可能になります。また変数の参照時には「!」マークで変数を囲ってあげます。

偶数行を取り出すには2で割った時のあまりが0になればいいので、7行目で余りが0の時の処理を書いてあげます。

今回はtoridasi.txtというファイルに書き出してあげました。

 応用編

先ほどは偶数行を別ファイルに書き出すことをしましたが応用編としてファイルのnの倍数の行を自分で指定したファイルに書き出すように改造していきます。

@echo off
setlocal enabledelayedexpansion
set num=0
for /f %%i in (%1) do (
    set /A num=num+1
    set /A amari=!num!%% %2
    if !amari! equ 0 echo %%i >> %3
) 

赤字のところが今回改造したところです。バッチファイルを実行するとき第2引数と第3引数にnの倍数の値と書き出しファイルを設定しました。最初に書いたコードと違って自由度が上がったことが分かるかと思います。

もし何かの機会に使うことがありましたらぜひ参考にしてみてください。

 

おしまい