[Powershell]:Copy-Itemの2回目の実行により、サブフォルダーが作成されます(5.1.17763.1007)
ワイルを検索した後、ここに質問を投稿する必要があります。簡単なタスクを実行したい:
copy-item -path "C:\Folder Copied" -destination "C:\Folder Copied_New" -recurse
ディレクトリ「FolderCopied_New」が「C:」に存在すると仮定すると、PSはフォルダを作成し、フォルダ(およびそのコンテンツ)「C:\ FolderCopied」を「FolderCopied_New」にコピーします。
ただし、コマンドを2回実行すると、次のことが発生します。
Powershellが作成しました: "C:\ Folder Copied_New \ Folder Copied"(コンテンツ "Test.txt"もこの新しく作成されたフォルダーにコピーされました...
3回目にコマンドを実行すると、フォルダがすでに存在していると表示されます...
だから私の質問:コマンドを2回実行した後、PSは「FolderCopied_New」というエラーをスローするはずです。それ、どうやったら出来るの?
パスに「」を使用する場合と使用しない場合で、新しいフォルダをコピーして名前を変更しようとしましたが、何も機能しませんでした。-Testpathを使用することは考えていますが、コミュニティにもっと単純な(BestPractice)アプローチを依頼すると思いました。
読んでアドバイスしてくれてありがとう!
別の質問でよく説明されていますが、同じ問題です
回答
その動作がデフォルトです。
アイテムをコピーして名前を変更したいとします。そのため、次のようにします。
Copy-Item -path source.txt -Destination destination.txt
destination.txt
の内容で名前が付けられたファイルが必要source.txt
です。
ファイルの名前を変更せずにコピーしたい場合は、次のようにします。
Copy-Item -path source.txt -Destination C:\test
ファイルがに表示さsource.txt
れることを期待しますC:\test
。C:\test
存在しなかった場合は作成されます。
それでは、宛先が存在しない状態でフォルダをコピーしてみましょう。
Copy-Item -path C:\test -Destination D:\toast
宛先が存在しなかったため、ソースフォルダーを宛先にコピーして作成しました。宛先の内容はソースと同じになります。フォルダD:\toast
はと同じですが、C:\test
その過程で名前が変更されました。
ただし、ソースオブジェクト(フォルダ)が配置される宛先パスを指定すると、そこに配置されます。
Copy-Item -path C:\test -Destination D:\toast
D:\toast
以前のアクションから存在していたので、そこにのコピーC:\test
が作成されます。D:\toast\test
答えではありませんが、コメントを書くのが待ち遠しいです。次のスクリプトを実行して、出力を表示できますか?
$root = "$($env:TEMP)\test" $source = "$($root)\Logfiles"
$destination = "$($root)\Drawings\Logs" # Verify folders don't exist yet if (Test-Path $source) {Throw}
if (Test-Path $destination) {Throw} # Set up New-Item $source, $destination -ItemType Directory -Force | Out-Null # Create folders New-Item "$($source)\testfile" -ItemType File -Force | Out-Null # Create a testfile # Show files/folders before copy Write-Output "Before copy" Get-ChildItem $root -Recurse | select fullname
# Copy first time
Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue
Write-Output "After first time copy"
Get-ChildItem $root -Recurse | select fullname # Copy second time Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue Write-Output "After second time copy" Get-ChildItem $root -Recurse | select fullname
# Copy third time
Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue
Write-Output "After third time copy"
Get-ChildItem $root -Recurse | select fullname # Clean up Remove-Item $source, $destination -Force -Recurse | Out-Null
私のコンピューターでは、異常な動作は見られません。ソースフォルダは、最初から宛先にコピーされます。2回目の実行では何も変更されず、3回目の実行でも変更されません。
