使用PowerShell以文件夹结构复制最近修改的文件

使用PowerShell以文件夹结构复制最近修改的文件,powershell,Powershell,我是新来的。有人能帮我满足以下要求吗。 我有文件夹、子文件夹和子文件夹,。。。以及每个级别文件夹中的文件。 如果任何文件被修改/创建,我需要用相应的文件夹结构复制修改/创建的文件 例如,我的文件夹结构如下所示 src ├── classes │ └── ClassFile1(file) ├── objects │ └── ObjectFile1(file) └── Aura └── Component ├── ComponentFile1(file)

我是新来的。有人能帮我满足以下要求吗。 我有文件夹、子文件夹和子文件夹,。。。以及每个级别文件夹中的文件。 如果任何文件被修改/创建,我需要用相应的文件夹结构复制修改/创建的文件

例如,我的文件夹结构如下所示

src
├── classes
│   └── ClassFile1(file)
├── objects
│   └── ObjectFile1(file)
└── Aura
    └── Component
        ├── ComponentFile1(file)
        └── ComponentFile2(file)
现在,如果ComponentFile1发生更改,那么我需要将仅与该文件相关的文件夹结构复制到我的目标文件夹中。比如src/aura/Component/ComponentFile1

我试过这样的东西,但不起作用

$Targetfolder= "C:\Users\Vamsy\desktop\Continuous Integration\Target"

$Sourcefolder= "C:\Users\Vamsy\desktop\Continuous Integration\Source"

$files = get-childitem $Sourcefolder -file | 
          where-object { $_.LastWriteTime -gt [datetime]::Now.AddMinutes(-5) }|
          Copy-Item -Path $files -Destination $Targetfolder -recurse -Force

感谢您在这方面的帮助。

使用robocopy而不是复制项目,您想要的东西很容易实现。 它具有系统文件夹、清除已删除文件夹和许多其他选项。 用法如下:

$source = 'C:\source-fld'
$destination = 'C:\dest-fld'
$robocopyOptions = @('/NJH', '/NJS') #just add the options you need
$fileList = 'test.txt' #optional you can provide only some files or folders or exclude some folders (good for building a project when you want only the sourcecode updated)

Start robocopy -args "$source $destination $fileList $robocopyOptions"
一些有用的选择:

/s-包括非空子目录 /e包含所有子目录(有时需要,因为内容将在构建或测试时放在那里) /b-备份模式-仅复制新文件 /purge-删除源文件夹中删除的内容


有关所有参数,请参见下面的代码

$srcDir = "C:\Users\Vamsy\desktop\Continuous Integration\Target"
$destDir = "C:\Users\Vamsy\desktop\Continuous Integration\Source"

Get-ChildItem $srcDir -File -Recurse |
Where-Object LastWriteTime -gt (Get-Date).AddMinutes(-5) |
ForEach-Object {
    $destFile = [IO.FileInfo]$_.FullName.Replace($srcDir, $destDir)
    if($_.LastWriteTime -eq $destFile.LastWriteTime) { return }
    $destFile.Directory.Create()
    Copy-Item -LiteralPath $_.FullName -Destination $destFile.FullName -PassThru
}

谢谢你的回复。我尝试过使用RoboCopy,但在我的场景中,我需要最新修改的文件或在过去5分钟内修改的文件。使用Robocopy,我们可以过滤到天/日期,但我认为不能过滤到分钟。所以我被RoboCopy/XCopy困住了。非常感谢@rokumaru你让我开心了一天。。!!