【问题标题】:Copy most recent file from folder to destination将最近的文件从文件夹复制到目标
【发布时间】:2016-01-19 19:33:40
【问题描述】:

我需要一些有关 powershell 的帮助。我的经验非常有限,因为我是 sql server dba。我目前正在做的是将数据库从 2000 年迁移到 2008 年。我想将 .bak 副本从源自动复制到目标,因此我不需要进入每个文件夹并复制然后粘贴。那我给个图吧。源目录有文件夹 a b c d。我希望脚本从每个文件夹中读取,或者最好指定文件夹名称并获取最新的 .Bak 按日期完整备份并复制到目的地。目标将具有相同的文件夹,因此将文件夹 a 的备份复制到目标文件夹 a 会很棒。之后我想做同样的事情,但将我的搜索从完整备份搜索更改为差异搜索。任何帮助表示赞赏。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这就是我要解决的问题。文件夹路径和目标路径的变量是根文件夹,子文件夹的变量列出要搜索的每个文件夹。

    Clear-Host
    $ChildFolders = @('A', 'B')
    
    for($i = 0; $i -lt $ChildFolders.Count; $i++){
    
        $FolderPath = "D:\BackupSource\" + $ChildFolders[$i]
        $DestinationPath = "D:\BackupDestination\" + $ChildFolders[$i]
    
        gci -Path $FolderPath -File | Sort-Object -Property LastWriteTime -Descending | Select FullName -First 1 | %($_){ 
        $_.FullName
        Copy-Item $_.FullName -Destination $DestinationPath 
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      鉴于这种结构,意味着所有文件夹都存在。

      ├───destination
      │   ├───A
      │   └───B
      └───source
          ├───A
          └───B
      

      您可以执行以下操作:

      $folders = @('A', 'B')
      $source = 'source'
      $destination = 'destination'
      $filter = '*.bak'
      
      $folders | foreach {
          $source_path = [io.path]::combine($source, $_)
          $destination_path = [io.path]::combine($destination, $_)
          gci $source_path -File -Filter $filter | sort -Property LastWriteTime -Descending | 
              Select -first 1 | copy -Destination $destination_path
      }
      

      它会获取与您的过滤器匹配的所有文件,按 LastWriteTime 降序对它们进行排序,选择最新的并将其复制到您的目的地。

      【讨论】:

        猜你喜欢
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        相关资源
        最近更新 更多