program each; {$apptype console} uses Windows, SysUtils, UDirList in 'UDirList.pas'; function shell(const commandline: pchar): integer; cdecl; external 'CRTDLL.DLL' name 'system'; const CRLF = ^M^J; stUsage = 'each Version 1.00 Copyright (c) 1992,99 by arima.yasuhiro@nifty.com' + CRLF + '使用方法' + CRLF + ' each Files -- Command' + CRLF + ' Files:' + CRLF + ' ファイル名(ワイルドカード使用可能)' + CRLF + ' Command:' + CRLF + ' コマンド中のマクロを展開してから実行する.' + CRLF + ' Files と Command は "--" を境界とする.' + CRLF + '実行例' + CRLF + ' each *.bak -- del #f' + CRLF + ' each *.doc -- copy #f %n.bak' + CRLF + ' each *.h *.c -- copy #f %p\..\DESTDIR' + CRLF + 'マクロ 内容' + CRLF + ' ## # 自身' + CRLF + ' #P 絶対パス' + CRLF + ' #p 相対パス' + CRLF + ' #D データディレクトリの絶対パス' + CRLF + ' #d データディレクトリの相対パス' + CRLF + ' #f ファイル名' + CRLF + ' #n 拡張子を除くファイル名' + CRLF + ' #e 拡張子'; procedure Usage(cond: integer); begin write(stUsage); halt(cond); end; var st: string; NewCmdLine: string; i: integer; DirList: TDirList; begin if ParamCount = 0 then Usage(1); NewCmdLine := CmdLine; i := pos('--', NewCmdLine); if i = 0 then Usage(2); delete(NewCmdLine, 1, i+1); trim(NewCmdLine); if NewCmdLine = '' then Usage(3); DirList := TDirList.Create; for i := 1 to ParamCount do begin st := ParamStr(i); if st = '--' then break; DirList.Open(st); end; DirList.BaseDir := GetCurrentDir; for i := 0 to DirList.Count-1 do begin st := DirList.EvalFileNameMacro(i, NewCmdLine); shell(pchar(st)); end; DirList.Free; end.