Windows で UNIX の find みたいなことをする

背景

forfiles コマンドを使えば Windows でも UNIX の find コマンドみたいなことが出来る。
が、Windows XP だったりすると forfiles なにそれおいしいの?ということは珍しくないと思う*1

解決策

dir コマンドを使って劣化 find コマンドを作る。

@echo off
setlocal

set target=%1

set exec_cmd=%2
if "%exec_cmd%"=="" (
  set exec_cmd=dir /b
) else (
  set exec_cmd=%exec_cmd:"=%
)

shift
shift

for /f "usebackq" %%i in (`dir /b /s %target%`) do (
  %exec_cmd% %1 %2 %3 %4 %5 %6 %7 %8 %9 %%i
)

ここでは wfind.bat としてパスを通しておく。
使う時はこんな感じ。
第一パラメータに処理対象ファイル、第二パラメータに実行コマンドを指定する*2

C:\Users\eb>wfind *.txt
abc.txt
def.txt

C:\Users\eb>wfind *.txt type
C:\Users\eb\abc.txt
C:\Users\eb\def.txt

第二パラメータの実行コマンドになんちゃって sed みたいな VBScript を、そしてこのバッチファイル自体は他のバッチファイルから呼び出す、みたいにして使っていた。
昔を思い出したので書いてみたけど、XP のサポートが終了した今となっては全く価値のないバッチファイル。

本当に今は良い時代になったものだと思う。

*1:リソースキットから入れれば済む話だがそれが出来ない環境も珍しくなかった

*2:実行コマンドを指定しなかった場合には dir /b コマンドとして動くようにしてある