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

时间:2019-04-17 09:24:22

标签: powershell

我是PowerShell的新手。有人可以帮助我满足以下要求吗? 我在每个级别的文件夹中都有文件夹,子文件夹和子子文件夹...。 如果任何文件被修改/创建,则需要使用相应的文件夹结构复制该修改/创建的文件。

例如-> 我的文件夹结构如下所示。

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

对此有任何帮助。

2 个答案:

答案 0 :(得分:0)

使用 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 -备份模式-仅复制较新的文件 /清除-删除源文件夹中删除的内容

有关所有参数,请参见robocopy docs

答案 1 :(得分:0)

请尝试以下代码。

$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
}