首页 > 解决方案 > 如何根据上次修改日期将文件复制到网络驱动器?

问题描述

我们的 Git 存储库爆炸了,我们最终丢失了存储库,所以现在我们所有的用户代码都只在本地工作站上。对于临时存储,我们将让他们所有人都将他们的本地存储库放在网络共享上。我目前正在尝试编写一个 PowerShell 脚本,以允许用户使用 GridView 选择所有存储库,然后将它们复制到网络共享。这会导致很多重叠,所以我只希望具有最新修改日期(提交)的文件在它们是重复文件时被覆盖。

例如,

用户 1 有 repo\file.txt 最后修改 8/10 并将其上传到网络共享。

用户 2 也有 repo\file.txt 最后修改 8/12。当用户 2 复制到共享时,它应该覆盖用户 1 文件,因为它是较新的文件。

我是 PowerShell 的新手,所以我不确定该采取哪个方向。截至目前,我想出了如何复制所有文件,但无法弄清楚最后修改的部分。任何帮助将不胜感激。

$destination = '\\remote\IT\server'

$filesToMove = get-childitem -Recurse | Out-GridView -OutputMode Multiple
$filesToMove | % { copy-item $_.FullName $destination -Recurse }

标签: powershell

解决方案


这是我在这里的第一篇文章,所以请原谅。我正在浏览 reddit/stackoverflow 寻找案例来练习我的 PowerShell 技能。我尝试在本地家用 PC 上创建您要求的脚本,如果这对您有帮助,请告诉我:

$selectedFiles = get-childitem -Path "C:\Users\steven\Desktop" -Recurse | Out-GridView -OutputMode Multiple
$destPath = "D:\"
foreach ($selectedFile in $selectedFiles) {
    $destFileCheck = $destPath + $selectedFile
    if (Test-Path -Path $destFileCheck) {
        $destFileCheck = Get-ChildItem -Path $destFileCheck
        if ((Get-Date $selectedFile.LastWriteTime) -gt (Get-Date $destFileCheck.LastWriteTime)) {
            Copy-Item -Path $selectedFile.FullName -Destination $destFileCheck.FullName
        }
        else {
            Write-Host "Source file is older than destination file, skipping copy."
        }
    }
}

推荐阅读