PowerShellで大量ファイルをコピーする前に、どのファイルが対象かを一覧化し、件数と合計サイズを確認しておくと誤コピーを防げます。ワイルドカードを指定してすぐにCopy-Itemへ流すより、安全な順序です。
コピー前に対象集合を固定する
- 対象フォルダが正しいかフルパスで確認します。
- サブフォルダを含めるか、直下だけにするか決めます。
- 拡張子や更新日の条件が必要なら一覧で結果を確認します。
- コピー先の空き容量、同名上書きの有無、既存ファイルの扱いを決めます。
コピー件数とファイル対応表で照合する
- まず読み取りだけの
Get-ChildItem -LiteralPath "C:\Source" -Fileで一覧を取得します。 - 必要なら
Where-Objectで拡張子等を絞り、対象のCountと合計サイズを確認します。 - 一覧をCSVへ書き出して、先頭・末尾・例外ファイルを点検します。
Copy-Itemの-WhatIfが利用できる操作は、事前に予定動作を確認してから本実行します。- 実際のコピー時はコピー後に件数だけでなくハッシュ・ファイルサイズなどで整合を確認します。
同名ファイルの上書きを防ぐ
- 対象件数がゼロなら正常終了とせず、条件指定が間違っていないか調べます。
-Recurseはサブフォルダまで含むため、無条件に追加しないでください。- コピー先に既存同名がある場合、上書きルールを先に決めます。
コピー前後の件数とハッシュを照合する
- コピー前の一覧とコピー後の一覧を差分比較します。
- 重要なファイルはSHA-256などで複製が一致することを確認します。
予定外のファイルを混ぜないための確認
Get-ChildItemで取得した一覧に、拡張子や更新日などの条件を指定し、コピー対象のフルパスをCSVへ記録しておくと、対象件数が期待値と違う場合に止めやすくなります。たとえば「今月のPDFだけ」のはずなのにExcelファイルが混ざるなら、本番コピー前にフィルター条件を見直します。
対象フォルダーにあるディレクトリとファイルを区別し、同名のファイルが別階層にある場合の保存先衝突も確認してください。コピー後は単純な件数一致だけでは不十分です。重要なファイルはサイズ・SHA-256を比較し、コピー元で失われたり上書きされたりしていないかを検証します。
件数確認の読み取り専用例(PowerShell 5.1)
次の例はコピーせずにフォルダー直下のPDF数と総バイト数を調べます。C:\Sourceは自分の実フォルダーへ置き換えてください。フォルダーが存在しなければエラーになります。
$source = 'C:\Source'
if (-not (Test-Path -LiteralPath $source -PathType Container)) { throw 'コピー元がありません' }
$items = @(Get-ChildItem -LiteralPath $source -File -Filter '*.pdf' -ErrorAction Stop)
$sum = ($items | Measure-Object -Property Length -Sum).Sum
"対象件数=$($items.Count) 合計バイト数=$sum"
$items | Select-Object FullName, Length, LastWriteTime
結果の件数が想定と違えばコピー工程へ進まないでください。サブフォルダーを含める場合は-Recurseの有無を明示して別の一覧を作ります。
