ディレクトリ内のファイルをバッチスクリプトで順次処理する

2022年2月12日

バッチスクリプトを使うと様々なことが一括で自動処理出来ます。
今回はバッチスクリプトを使ってWindowsで特定のディレクトリ(フォルダ)の配下にあるファイルを一括で処理するサンプルスクリプトです。

色んなことに応用することが可能ですので参考にしてみて下さい。
#スクリプトは商用含めて自由に使っていただいて構いませんが使用したことで起きた事象に責任は負いかねますので予め承知の上でご利用ください。

1.やりたいこと

この記事で紹介するスクリプトでやりたいことは以下となります。

Windowsのディレクトリ内にある特定の拡張子のファイルを順次処理したい。

 

スポンサードサーチ

2.準備

この記事で紹介するスクリプトを実行するために以下の準備を行います。

1)ディレクトリ

実行用に準備するディレクトリ構成です

C:\
┗TEMP
_┗DATA                    ⇒処理する対象データが格納されるディレクトリ
___┗sampleXX.bat   ⇒バッチスクリプト

 

2)データファイル

テスト用に以下のテキストファイルを用意します。

テキストファイルの内容は適当で構いません。
今回は以下のような内容(すべて同じ)です。

 

スポンサードサーチ

3.テンプレートスクリプト

1)ディレクトリ内のファイルを順次表示させる

まずディレクトリ内の特定の拡張子を順次処理するテンプレートコードです。

 

@ECHO OFF
SET TARGETDIR=C:\TEMP\DATA
SET TARGETEXT=txt
FOR %%F IN (%TARGETDIR%\*.%TARGETEXT%) DO (
 実行コード
)

 

2行目に処理したいディレクトリのパスを記述します。

3行目に処理したいファイルの拡張子を指定します。
上記では「txt」を指定していますが「*」を指定すると全てのファイルを対象に処理します。

5行目の「実行コード」の部分にファイルに対して行いたいコマンドを記述します。
ファイル名はフルパスで「%%F」にセットされて受け取れます。
例えばファイル名を表示したい場合は

ECHO %%F

とすることでファイル名がフルパス表示されます。

7行目の「PAUSE」は実行後にコマンドのウインドウが消えてしまうのでキー入力で一旦止めるために付けています。削除してかまいません。

ではやってみましょう

バッチスクリプトは「sample01.bat」で以下の内容になっています。

 

@ECHO OFF
SET TARGETDIR=C:\TEMP\DATA
SET TARGETEXT=txt
FOR %%F IN (%TARGETDIR%\*.%TARGETEXT%) DO (
    ECHO %%F                                               
    )
PAUSE

バッチファイル「sample01.bat」をダブルクリックすると実行します。

実行結果は以下となります。

 

C:\TEMP\DATA\testdata (1).txt
C:\TEMP\DATA\testdata (2).txt
C:\TEMP\DATA\testdata (3).txt
C:\TEMP\DATA\testdata (4).txt
C:\TEMP\DATA\testdata (5).txt
続行するには何かキーを押してください . . .

 

2)ディレクトリ内のファイルを一括で順次zipに圧縮するバッチスクリプト

ディレクトリ内のファイルを一つのzipファイルに圧縮するのはバッチスクリプトを使わずにコマンドで実現可能ですが、1ファイルを1zipファイルにするにはバッチで順次処理を行う必要があります。

バッチコマンドにzip圧縮するコマンドはありませんのでPowerShellを利用します。

PowerShellでzipへの圧縮を行う構文は以下となります。

【構文】

Compress-Archive [-Path] 圧縮したいファイルパス [-DestinationPath] 圧縮後のzipファイルパス [パラメータ]

出力したいzipファイルが既に存在する場合はパラメータにーForceを指定しないとエラーになります。

ではやってみましょう。

先ほどのバッチファイルの「実行コード」の部分(5行目~7行目)でFOR文により拡張子とファイル名を分離してPowerShellの圧縮のコードを埋め込んでいます。

@ECHO OFF
SET TARGETDIR=C:\TEMP\DATA
SET TARGETEXT=txt
FOR %%F IN (%TARGETDIR%\*.%TARGETEXT%) DO (
    FOR /F "delims=. tokens=1" %%G IN ("%%F") DO (
        PowerShell Compress-Archive -Path '%%F' -DestinationPath '%%G.zip' -FORCE
      )
    )
PAUSE

実行すると以下のように各txtファイルがzipファイルに圧縮されているのが分かります。

 

4.終わりに

今回ご紹介したバッチファイルの「実行コード」の部分にコマンドを組み込むことでディレクトリ内のファイルに個別に処理を行うことが出来ます。

いろいろとアレンジしてみて句ください。