使用 powershell 将文件和文件夹复制到 30 分钟前的存档文件夹
use powershell to copy files and folders to archive folder older 30 minutes
我想将超过 30 分钟的文件从活动文件夹复制到存档文件夹,并使用 powershell 保留文件夹结构。到目前为止我有这个命令,但虽然它移动了文件和文件夹,但它会将所有文件放入目标的顶层。
get-childitem -Recurse -Path "c:\input folder" | where-object {$_.CreationTime -lt (get-date).AddMinutes(-90)} | copy-item -destination "E:\output archive"
所以如果我的来源是这样的 -
c:\input folder\sub1\filea.txt
c:\input folder\sub2\fileb.txt
c:\input folder\sub3\filec.txt
我在目标中的命令目前看起来像这样这是错误的,因为我希望它保留文件夹结构 -
e:\output archive\sub1\
e:\output archive\sub2\
e:\output archive\sub3\
e:\output archive\filea.txt
e:\output archive\fileb.txt
e:\output archive\filec.txt
它应该是这样的 -
c:\output archive\sub1\filea.txt
c:\output archive\sub2\fileb.txt
c:\output archive\sub3\filec.txt
我的命令缺少什么?
复制文件时需要保留相对于源文件夹的部分路径。通常复制语句不会这样做,而是将文件从任何(源)子文件夹复制到目标文件夹。
将每个复制项目全名中的源文件夹部分替换为目标文件夹:
$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 }
我想将超过 30 分钟的文件从活动文件夹复制到存档文件夹,并使用 powershell 保留文件夹结构。到目前为止我有这个命令,但虽然它移动了文件和文件夹,但它会将所有文件放入目标的顶层。
get-childitem -Recurse -Path "c:\input folder" | where-object {$_.CreationTime -lt (get-date).AddMinutes(-90)} | copy-item -destination "E:\output archive"
所以如果我的来源是这样的 -
c:\input folder\sub1\filea.txt
c:\input folder\sub2\fileb.txt
c:\input folder\sub3\filec.txt
我在目标中的命令目前看起来像这样这是错误的,因为我希望它保留文件夹结构 -
e:\output archive\sub1\
e:\output archive\sub2\
e:\output archive\sub3\
e:\output archive\filea.txt
e:\output archive\fileb.txt
e:\output archive\filec.txt
它应该是这样的 -
c:\output archive\sub1\filea.txt
c:\output archive\sub2\fileb.txt
c:\output archive\sub3\filec.txt
我的命令缺少什么?
复制文件时需要保留相对于源文件夹的部分路径。通常复制语句不会这样做,而是将文件从任何(源)子文件夹复制到目标文件夹。
将每个复制项目全名中的源文件夹部分替换为目标文件夹:
$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 }