0

我有两个文件夹

  • C:\文件夹1
  • C:\文件夹2

两个文件夹都包含具有不同编号文件名的 *.txt 文件(例如 01.txt、02.txt...10.txt)

该脚本比较两个文件夹中存在的文件。然后仅将“Folder1”中不存在于“Folder2”中的文件复制到 C:\TestFolder,反之亦然。

例如,如果:

  • Folder1 包含一个名为 10.txt 的文件
  • Folder2 包含多个文件 02.txt,10.txt

那么 02.txt 将是唯一复制到 C:\Testfolder 的文件。

我将修改以下脚本以添加以下功能:

  • 如果 Folder1 中的文件较新,则“所有”Folder2 中的文件:什么都不做。
  • 如果 Folder1 中的文件较新,则 Folder2 上的“一些”文件:将较新的文件复制到 Folder3。

基本上我需要检查 Folder1 中存在的文件是否已经存在于 Folder2 中。还要验证此文件是否相同,或者 Folder2 中是否存在较新版本的文件。

Compare-Object $Folder1 $Folder2 -Property Name, Length , LastWriteTime | Where-Object {$_.SideIndicator -eq "<="} | ForEach-Object {
    Copy-Item "C:\Source\$($_.name)"  -Destination "C:\TestFolder" -Force -recurse -include "*.txt"
}
4

1 回答 1

0
$folder1="c:\folder1"
$folder2="c:\folder2"
$dest="c:\testfolder"
$folder1Files=dir $folder1
$folder2Files=dir $folder2
$newestFileFolder2=$folder2Files | sort LastWriteTime | select -expand LastWriteTime -Last 1
$equalFiles=diff $folder1Files $folder2Files -Property Name,Length -ExcludeDifferent -IncludeEqual -PassThru | select Name,LastWriteTime,FullName
foreach ($file in $equalFiles){
    #If the file present in Folder1 is newer then "all" the files in Folder2: do nothing
    if ($file.LastWriteTime -lt $newestFileFolder2){
        #If the file in the Folder1 is newer then "some" of the file on the Folder2: copy the newer files to Folder3.
        if ((dir "$folder2\$($file.Name)").LastWriteTime -gt $file.LastWriteTime){
            copy "$folder2\$($file.Name)" $dest -Force -recurse -include "*.txt"
        }
        else{
            copy "$($file.FullName)" $dest -Force -recurse -include "*.txt" 
        }
    }
}
于 2013-09-28T07:47:45.897 回答