ファイルコピー 同ディレクトリ構造からファイルをコピーする。(ミラーコピー?)

■今後の課題
1.相対パスに対応させる。
2.パスの暗号化(ほぼ必要ないかも)


■コード

$root = "C:\target"
$fdir = "C:\mirrordir"
$tdir = "C:\copytmp"

filter FileCopy () {
    $relativepath = $_.FullName.TrimStart($root)
    $fpath = Join-Path $fdir $relativepath
    $tpath = Join-Path $tdir $relativepath
    $tdirtmp = Split-Path $tpath -Parent
    if (Test-Path $fpath) {
        if (-not (Test-Path $tdirtmp)) {
            mkdir -path $tdirtmp
        }
        copy $fpath $tdirtmp
    }
}

dir -Path $root -Recurse |
    ? { $_.Attributes -ne "Directory" } |
    FileCopy

■参考サイト

関数、フィルタ、スクリプト

PowerShellでパス文字列を操作する

06.ファイルをコピーする

PowerShellのGet-ChildItemコマンドレットでファイル名の一覧を取得する(応用編)

PowerShell演算子とキーワード

■コード作成理由

 上書き対象のファイルをサーバ上にアップされているファイルとマージさせたい&バックアップを行うために作成

■コードを記述する上での観点

 1.省略文字(Alias)が設定されているものを積極的に使用しつつ、実態の名前も把握しておく

 2..NET Framework のライブラリは極力使用を控えつつ、PowerShellで用意されたコマンドレットを使用する。

 3.パス関連を扱う場合は出来る限り文字列操作ではなく、専用のライブラリを使用し、最後に Test-Path を行う。