背景
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 のサポートが終了した今となっては全く価値のないバッチファイル。
本当に今は良い時代になったものだと思う。