0

30 分以上経過したファイルをライブ フォルダーからアーカイブ フォルダーにコピーし、powershell を使用してフォルダー構造を保持したいと考えています。これまでのところこのコマンドがありますが、ファイルとフォルダーを移動しますが、すべてのファイルを移動先の最上位に配置します。

get-childitem -Recurse -Path "c:\input folder" | where-object {$_.CreationTime -lt (get-date).AddMinutes(-90)} | copy-item -destination "E:\output archive"

私のソースがこのように見える場合 -

c:\入力フォルダ\sub1\filea.txt

c:\入力フォルダ\sub2\fileb.txt

c:\入力フォルダ\sub3\filec.txt

現在、宛先のコマンドで次のように見えますが、フォルダー構造を保持したいので、これは間違っています-

e:\出力アーカイブ\sub1\

e:\出力アーカイブ\sub2\

e:\出力アーカイブ\sub3\

e:\出力アーカイブ\filea.txt

e:\出力アーカイブ\fileb.txt

e:\出力アーカイブ\filec.txt

それはこのように見えるはずです -

c:\出力アーカイブ\sub1\filea.txt

c:\出力アーカイブ\sub2\fileb.txt

c:\出力アーカイブ\sub3\filec.txt

私のコマンドに何が欠けていますか?

4

1 に答える 1

1

ファイルをコピーするときは、ソース フォルダーに対する部分パスを保持する必要があります。通常、copy ステートメントはそれを行いませんが、ファイルを (ソース) サブフォルダーから宛先フォルダーにコピーします。

コピーされた各アイテムの完全な名前のソース フォルダーの部分を、コピー先のフォルダーに置き換えます。

$src = 'C:\input folder'
$dst = 'E:\output archive'

$pattern = [regex]::Escape($src)

$refdate = (Get-Date).AddMinutes(-90)

Get-ChildItem -Recurse -Path $src |
  Where-Object { $_.CreationTime -lt $refdate } |
  Copy-Item -Destination { $_.FullName -replace "^$pattern", $dst }
于 2015-05-11T11:36:17.093 に答える