使用powershell实现文件夹
2017-09-01阅读 4787
$ConfirmPreference="none"
$File=Import-Csv path.csv -Encoding Default 
$LogFile="sync_log.csv"  
$Table = @{"source"='';"destination"='';"datetime"='';"SHA_Resu1t"='';} 
$Pstable =New-object -TypeName psobject -Prop $Table 
$Pstable | select-Object source,destination,datetime,SHA_Resu1t | Export-csv $LogFile -Force -NoTypeInformation -Encoding UTF8

foreach ($item in $File)
    {
        $s=$item.source.ToString().tolower()+'\'
        $d=$item.destination.ToString().tolower()+'\'
        Get-ChildItem $item.source -Recurse | ForEach-Object -Process {
            $Spath=$_.FullName.ToString().tolower()
            $Dpath=$Spath.replace("$s","$d")
            $datetime=get-date
            If((Test-Path -Path $Dpath) -eq $true) 
            {
               if(((Get-ChildItem $Dpath).psiscontainer) -eq $false) 
               {
                
                if((Get-Item $Spath).LastWriteTimen -gt (Get-Item $Dpath).LastWriteTime)
                {
                 Copy-Item "$Spath" -Destination "$Dpath" -Force
                 $OutInfo=$Spath.ToString()+','+$Dpath.ToString()+','+$datetime.ToString()
                 $OutInfo
                 $WriteLog=Out-File -FilePath "$LogFile" -InputObject "$OutInfo" -Append -Encoding utf8
                 $WriteLog                                   
                }
                elseif ((Get-Item $Spath).LastWriteTimen -lt (Get-Item $Dpath).LastWriteTime)
                {
                 Copy-Item "$Dpath" -Destination "$Spath" -Force
                 $OutInfo=$Dpath.ToString()+','+$Spath.ToString()+','+$datetime.ToString() 
                 $OutInfo
                 $WriteLog=Out-File -FilePath "$LogFile" -InputObject "$OutInfo" -Append -Encoding utf8
                 $WriteLog                                   
                }
               } 
            }
            else
            {
              Copy-Item "$Spath" -Destination "$Dpath" -Force
              $OutInfo=$Spath.ToString()+','+$Dpath.ToString()+','+$datetime.ToString()
              $OutInfo
              $WriteLog=Out-File -FilePath "$LogFile" -InputObject "$OutInfo" -Append -Encoding utf8
              $WriteLog 
            }
        }
         Get-ChildItem $item.destination -Recurse | ForEach-Object -Process {
         $RDpath=$_.FullName.ToString().tolower()
         $RSpath=$RDpath.replace("$d","$s")
         $datetime=get-date  
         If((Test-Path -Path $RSpath) -eq $false) #对比destination 中的对象是否在source中存在
         {
            Copy-Item "$RDpath" -Destination "$RSpath" -Force
            $OutInfo=$RDpath.ToString()+','+$RSpath.ToString()+','+$datetime.ToString()
            $OutInfo
            $WriteLog=Out-File -FilePath "$LogFile" -InputObject "$OutInfo" -Append -Encoding utf8
            $WriteLog  
         }  
    }
    }