我们的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 }
答案 0 :(得分:0)
这是我在这里的第一篇文章,因此请原谅。我正在浏览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."
}
}
}
答案 1 :(得分:0)
如果您的用户有权在远程目标路径中写入/删除文件,则应该这样做:
$destination = '\\remote\IT\server\folder'
# create the destination folder if it does not already exist
if (!(Test-Path -Path $destination -PathType Container)) {
Write-Verbose "Creating folder '$destination'"
New-Item -Path $destination -ItemType Directory | Out-Null
}
Get-ChildItem -Path 'D:\test' -File -Recurse |
Out-GridView -OutputMode Multiple -Title 'Select one or more files to copy' | ForEach-Object {
# since we're piping the results of the Get-ChildItem into the GridView,
# every '$_' is a FileInfo object you can pipe through to the Copy-Item cmdlet.
$skipFile = $false
# create the filename for a possible duplicate in the destination
$dupeFile = Join-Path -Path $destination -ChildPath $_.Name
if (Test-Path -Path $dupeFile) {
# if a file already exists AND is newer than the selected file, do not copy
if ((Get-Item -Path $dupeFile).LastWriteTime -gt $_.LastWriteTime ) {
Write-Host "Destination file '$dupeFile' is newer. Skipping."
$skipFile = $true
}
}
if (!$skipFile) {
$_ | Copy-Item -Destination $destination -Force
}
}