晴耕雨読

working in the fields on fine days and reading books on rainy days

[PowerShell] フォルダをコピーする (Copy-Item -Recurse)

PowerShellでフォルダをコピーするには Copy-Item コマンドレットに -Recurse オプションを追加して実行します。

Copy-Item -Recurse "fromFolder" "toFolder"

ただし、コピー先がフォルダなので、複数回コピーを連続して実行するとコピー先に ./toFolder/fromFolder というフォルダが作成されてしまいます。 そのため、コピーする前にコピー先が存在しないことを確認してからコピーすると意図通りのコピー先が作成されます。

$FromPath = "fromFolder"
$ToPath   = "toFolder"
if (!(Test-Path $ToPath)) {
    Copy-Item -Recurse $FromPath $ToPath
}

また稀に、フォルダのコピーに失敗する場合もあるので、コピーの処理をtry-catchで囲むとより安全にフローを制御することができます。

$ErrorActionPreference = "Stop"

$FromPath = "fromFolder"
$ToPath   = "toFolder"
if (!(Test-Path $ToPath)) {
    try {
        Copy-Item -Recurse $FromPath $ToPath
    } catch {
        Write-Output "[!] $ToPath の作成に失敗しました。"
    }
}

以上です。

参考文献