[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何删除两个类型和大小都一样/相同的文件

本帖最后由 pcl_test 于 2016-9-24 12:06 编辑
  1. @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. for /f "tokens=*" %%a in ('dir/a-d/b/oe') do set/a c+=1&set a!c!=%%a&set b!c!=%%~za&set c!c!=%%~xa
  4. for /l %%a in (1,1,%c%) do set/a d=%%a+1&for /l %%b in (!d!,1,%c%) do if not !b%%a!.==. call :1 %%a %%b
  5. goto :eof
  6. :1
  7. if !b%1!==!b%2! if !c%1!==!c%2! set b%2=&del "!a%2!"
  8. goto :eof
复制代码
怎样才能如果两个文件的类型和大小都一样,那两个都删除呢?

类型和大小不太严谨吧,用md5如何?

TOP

crc32 比 md5 更快更短,来一发:
  1. @echo off
  2. for /f "tokens=1*" %%a in ('hash /a::-d /crc32') do (
  3.    set file=%%b
  4.    if defined crc32[%%a] (
  5.       setlocal enabledelayedexpansion
  6.       del "!file!" "!crc32[%%a]!"
  7.       endlocal
  8.    )
  9.    set "crc32[%%a]=%%b"
  10. )
复制代码
hash.exe需单独下载:http://bbs.bathome.net/thread-30609-1-1.html

TOP

如果按楼主要求以大小和修改时间为依据,powershell 很方便:
  1. dir | where{$_.PSIsContainer -eq $false} | group length,LastWriteTime | where{$_.count -gt 1} | select group | del
复制代码

TOP

来个 bat+js:
  1. 1>1/* :
  2. @echo off
  3. dir /a-d | cscript -nologo -e:jscript "%~0"
  4. pause & exit /b */
  5. var map = {}
  6. var arr = WScript.StdIn.ReadAll().match(/^\d.+$/gm)
  7. for(var i=0;i<arr.length;i++){
  8.    var match = arr[i].match(/(.{35}) (.*)/)
  9.    map[match[1]] ? map[match[1]].push(match[2]) : map[match[1]]=[match[2]]
  10. }
  11. for(var i in map){
  12.    if(map[i].length>1)WScript.Echo(map[i].join('\r\n'))
  13. }
复制代码
1

评分人数

    • apang: var map = {}技术 + 1

TOP

一个比一个厉害呀!谢谢DAIC,谢谢CrLf!JS也可以像bat和vbs一样用吗?

TOP

回复 6# 小文


    忘了说,5 楼代码是要保存为 bat 运行的
    jscript 的宿主 wscript.exe 和 cscript.exe 支持以指定的语言来运行脚本,所以可以把某些不同语言的脚本写在同一个文件里
    js 支持多行注释,所以和 bat 混编有天然优势,vbs 虽然也可以,但很牵强

TOP

返回列表