如何利用批处理,对比文件夹后,进行差异备份?

如何利用批处理,对比文件夹后,进行差异备份?,第1张

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI<# :

cls&echo off&cd /d "%~dp0"&mode con lines=5000

rem 将一个文件夹跟另一个文件薯茄夹进行对比,并查找出不相同的文件

set #=Any question&set _=WX&set $=Q&数凳察set/az=0x53b7e0b4

title %#% +%$%%$%/%_% %z%

powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"

echo%#% +%$%%$%/%_% %z%

pause

exit

#>

$folder1="D:\xxx\A文件夹"

$folder2="D:\xxx\B文件夹"

$folder3="D:\xxx\C文件夹"

if(-not (test-path -literal $folder1)){write-host ('"'+$folder1+'" 未找到')exit}

if(-not (test-path -literal $folder2)){write-host ('"'+$folder2+'" 未找到')exit}

if(-not (test-path -literal $folder3)){[void][IO.Directory]::CreateDirectory($folder3)}

function getfilehash($file){

    $hash=''

    $md5=New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider

    $stream=New-Object System.IO.FileStream($file, [System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)

    $hash=[System.BitConverter]::ToString($md5.ComputeHash($stream)).replace('-','')

    $md5.Clear()

    $stream.Close()

    $stream.Dispose()

    return $hash

}

$files=@(dir -literal $folder1 -recurse|?{$_ -is [System.IO.FileInfo]})

for($i=0$i -lt $files.length$i++){

    $tmpfile=$folder2.trimend('\')+$files[$i].FullName.SubString($folder1.trimend('\').length)

    if(test-path -literal $tmpfile){

        $h1=getfilehash $files[$i].FullName

        $h2=getfilehash $tmpfile

   粗信     if($h1 -ne $h2){$files[$i].FullName}

    }else{$files[$i].FullName}

}

不清楚你的实际文件/情况,仅以问题中的说明及猜渣缓测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,A和B文件夹需设为共享文件夹

<# :

cls&echo off&cd /d "%~dp0"&mode con lines=5000

rem 对比两台电脑里的两个文件夹,找出相同名称的文件,将一个文件夹里的同名文件替换掉另一个文件夹的同名文件

set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%_% %z%

set "current=%cd%"

powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"

echo%#% +%$%%$%/%_% %z%

pause

exit

#>

$folder1="\\A电脑IP\A文件夹"

$folder2="\\B电脑IP\B文件夹"

$b=[Convert]::FromBase64String("IC0tPiA=")

$c=[Text.Encoding]::Default.GetString($b)

$dic=New-Object 'System.Collections.Generic.Dictionary[string, object]'

$files1=@(dir -literal $folder1|?{$_ -is [System.IO.FileInfo]})

for($i=0$i -lt $files1.count$i++){

    $key=$files1[$i].Name.ToLower()

    if(-not $dic.ContainsKey($key)){

        $arr=New-Object -TypeName System.Collections.ArrayList

        [void]$dic.add($key, $arr)

    }

    [void]$dic[$key].add($files1[$i])

}

$files2=@(dir 如前模-literal $folder2|?{$_ -is 悔弊[System.IO.FileInfo]})

for($i=0$i -lt $files2.count$i++){

    $key=$files2[$i].Name.ToLower()

    if($dic.ContainsKey($key)){

        $dic[$key][0].FullName+$c+$files2[$i].FullName

    }

}

WinDiff不仅可以进行文贺芹戚件的比较,同时还可以进行目录的比较。进行目录比较很简单,选择其主菜单“File/Compare DirectorIEs”,在其中输入需要比较的目录首岁位置,其中禅陵选中“Include subdirectories”将对子目录进行比较。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12261008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存