[Powershell]:Copy-Itemの2回目の実行により、サブフォルダーが作成されます(5.1.17763.1007)

Aug 24 2020

ワイルを検索した後、ここに質問を投稿する必要があります。簡単なタスクを実行したい:

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)アプローチを依頼すると思いました。

読んでアドバイスしてくれてありがとう!

別の質問でよく説明されていますが、同じ問題です

回答

1 T-Me Aug 24 2020 at 22:26

その動作がデフォルトです。

アイテムをコピーして名前を変更したいとします。そのため、次のようにします。

Copy-Item -path source.txt -Destination destination.txt

destination.txtの内容で名前が付けられたファイルが必要source.txtです。

ファイルの名前を変更せずにコピーしたい場合は、次のようにします。

Copy-Item -path source.txt -Destination C:\test

ファイルがに表示さsource.txtれることを期待しますC:\testC:\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

2 LievenKeersmaekers Aug 24 2020 at 15:20

答えではありませんが、コメントを書くのが待ち遠しいです。次のスクリプトを実行して、出力を表示できますか?

$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回目の実行でも変更されません。