【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

ファイルの一括コピー

特定のディレクトリ以下にあるJPEGファイルを一括でコピーする必要に迫られました。VC#でプロジェクトを作るのが面倒だったのでF# Interactiveでやってみました。ファイル名の重複を避けるため更新日時をファイル名にしています。

let recdir dir f=
    let rec recdir (di:DirectoryInfo)=
        f di
        for d in di.GetDirectories() do recdir d done
    recdir (DirectoryInfo dir)

let recfile dir pattern f=
    recdir dir (fun di->for fi in (di.GetFiles pattern) do f fi done)

recfile @"\\Server\images" "*.jpg" (fun fi->
    fi.CopyTo(Path.Combine(@"c:\temp",fi.LastWriteTime.ToString("yyyyMMddHHmmss")+".jpg"),true)|>ignore)

recdirとrecfileの定義はスタートアップ(--useオプション)に登録しておけば次から簡単に使えます。こういうことはWindows PowerShellでやるべきかもしれませんが、そちらはまだ使ったことがありません。