まほろば技術パーク

@komeshogun's InfoTech MEMO

指定されたフォルダ内の特定拡張子のファイルを検索するWindowsバッチ

■概要
特定のディレクトリに特定の拡張子のファイルが存在するかチェックする。

■小ネタ
①同一処理を呼び出す場合はサブルーチンを利用する

CALL :CHECK_FILE %CHECK_DIR\dir1\
CALL :CHECK_FILE %CHECK_DIR\dir2\
CALL :CHECK_FILE %CHECK_DIR\dir3\

※サブルーチンを呼び出す時に引数も使える。

:CHECK_FILE
CD /D %1

②サブディレクトリも検索対象とする場合は「/s」オプションをつける。

FOR /f "delims=;" %%I IN ('dir /b /on /s *.txt') DO (

③削除確認が必要な場合は「/Q」オプションをつける。

DEL /Q %%I

④現在実行中のバッチ・スクリプトを終了する

EXIT /B


■サンプルプログラム

@ECHO OFF

SET CHECK_DIR=C:TEMP\

ECHO 配下にロックファイルが作成されているかチェックを行います。
ECHO チェック対象ディレクトリ:%CHECK_DIR%

SET /P CHECK_FLG="ディレクトリが正しいか確認してください。続行しますか?(Y):"

IF /I NOT "%CHECK_FLG%"=="Y" GOTO :END

REM 対象ファイルが増えた場合は追加する

REM exec.txt
CALL :CHECK_FILE %CHECK_DIR\dir1\
CALL :CHECK_FILE %CHECK_DIR\dir2\
CALL :CHECK_FILE %CHECK_DIR\dir3\

PAUSE

EXIT

REM フォルダに配下にロックファイルが存在するかチェックする。
:CHECK_FILE

CD /D %1

SET EXEC_FLG=
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "delims=;" %%I IN ('dir /b /on /s *.txt') DO (
  ECHO ============================================
  ECHO %%I
  SET /P EXEC_FLG="削除しますか?(Y):"

  IF /I "!EXEC_FLG!"=="Y" (
   DEL /Q %%I
   ECHO %%Iを削除しました。
 )
)
ENDLOCAL

EXIT /B

:END

EXIT