Board logo

标题: [文件操作] 批处理如何实现不同文件夹md5比较后追加和删除? [打印本页]

作者: 娜美    时间: 2021-11-24 09:55     标题: 批处理如何实现不同文件夹md5比较后追加和删除?

本帖最后由 娜美 于 2022-1-16 08:57 编辑

不同文件夹md5比较   追加  和 删除
a b文件夹内的 txt  rar csv文件md5对比

a文件夹内大概有500个这样格式的文件
b文件夹大概有5个这样格式的文件
如果A文件夹内的文件md5和b内文件md5相同,则删除B文件夹的相同md5文件

例如 D:\A



考虑到后面有追加方案,  可能需要分开2种写
1.  先获取到a内文件夹内所有md5及文件名称以文本格式存放  格式如下
a.md5.txt



另一个BAT
2.  再获取b文件夹所有md5存放


然后和 a.md5.txt  b.md5.txt 文件进行MD5比较
如果它们第1列的md5和a.md5.txt的第1列相同,则删除b文件夹内仅md5相同文件
按照上面给出示例数据,会删除b文件夹下5.txt文件,因为它们第1列md5相同   



然后会将
b.md5.txt
里面最后2条新不相同md5追加到a.md5.txt去存放, 以备下次可以直接拿来对比,不用再一次获取a目录下md5,这样可以省很多时间


因为每天会从QQ下载新文件, 需要收集文件md5, 比较  删除

最终目的    删除相同md5文件   把不相同md5文件清单 追加到a.md5.txt去存放

Thanks
作者: idwma    时间: 2021-11-24 20:34

本帖最后由 idwma 于 2021-11-24 22:14 编辑
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. dir D:\A|%{
  3. $c=[IO.File]::OpenRead($_.fullname)
  4. $d+=@([BitConverter]::ToString([Security.Cryptography.MD5]::Create().ComputeHash($c)).Replace("-","")+"    "+"$_.name")
  5. $c.Close()
  6. }
  7. out-file -input $d -enc default a.md5.txt
复制代码
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $a=type a.md5.txt
  3. dir D:\B|%{
  4. $c=[IO.File]::OpenRead($_.fullname)
  5. $b=[BitConverter]::ToString([Security.Cryptography.MD5]::Create().ComputeHash($c)).Replace("-","")
  6. $c.Close()
  7. if($a -match $b){del $_.fullname}else{out-file -input "$b    $_.name" -enc default a.md5.txt -append}
  8. }
复制代码

作者: 娜美    时间: 2021-11-24 23:28

本帖最后由 娜美 于 2021-11-24 23:51 编辑

回复 2# idwma


idwma哥  这么快就来了   嗯嗯 刚大概测了一下, 看起来非常好  Thanks Thanks idwma哥
作者: 娜美    时间: 2021-11-25 08:25

本帖最后由 娜美 于 2021-11-25 08:57 编辑

回复 2# idwma


   idwma哥  我偿试这样加入多种后缀,  


idwma哥哥    可以挑选加入多种文件后缀吗


  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. dir D:\A\*.rar,*.txt,*.zip,*.7z,*.csv|%{
  3. $c=[IO.File]::OpenRead($_.fullname)
  4. $d+=@([BitConverter]::ToString([Security.Cryptography.MD5]::Create().ComputeHash($c)).Replace("-","")+"   
  5. "+"$_.name")
  6. $c.Close()
  7. }
  8. out-file -input $d -enc default a.md5.txt
复制代码




  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $a=type a.md5.txt
  3. dir D:\A\*.rar,*.txt,*.zip,*.7z,*.csv|%{
  4. $c=[IO.File]::OpenRead($_.fullname)
  5. $b=[BitConverter]::ToString([Security.Cryptography.MD5]::Create().ComputeHash($c)).Replace("-","")
  6. $c.Close()
  7. if($a -match $b){del $_.fullname}else{out-file -input "$b    $_.name" -enc default a.md5.txt -append}
  8. }
复制代码


作者: idwma    时间: 2021-11-25 17:09

回复 4# 娜美
  1. dir D:\A\* -include *.rar,*.txt,*.zip,*.7z,*.csv
复制代码

作者: 娜美    时间: 2021-11-25 18:57

回复 5# idwma



idwma 哥    加了 include后     非常帅了 Thank you
作者: 娜美    时间: 2021-11-25 19:13

本帖最后由 娜美 于 2021-11-25 19:15 编辑

idwma大哥哥   觉得你写的powershell语言风格好帅哦  都是一句话完成,  没有半句多余的  并没有出现加长版   真是超级帅
作者: dyhq2021    时间: 2022-1-19 08:59

回复 2# idwma
作者: dyhq2021    时间: 2022-1-19 09:07

Invoke-Expression : 表达式或语句中出现意外标记“}”。
所在位置 行:1 字符: 29
+ type D:\a.bat|out-string|iex <<<<
    + CategoryInfo          : ParserError: (}:String) [Invoke-Expression], Par
   seException
    + FullyQualifiedErrorId : UnexpectedToken,Microsoft.PowerShell.Commands.In
   vokeExpressionCommand

请按任意键继续. . .




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2