标题: [文件操作] [已解决]批处理如何删除两个类型和大小都一样/相同的文件 [打印本页]
作者: 小文 时间: 2015-1-15 13:16 标题: [已解决]批处理如何删除两个类型和大小都一样/相同的文件
本帖最后由 pcl_test 于 2016-9-24 12:06 编辑
- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- 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
- 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
- goto :eof
- :1
- if !b%1!==!b%2! if !c%1!==!c%2! set b%2=&del "!a%2!"
- goto :eof
复制代码
怎样才能如果两个文件的类型和大小都一样,那两个都删除呢?
作者: DAIC 时间: 2015-1-15 16:03
类型和大小不太严谨吧,用md5如何?
作者: CrLf 时间: 2015-1-15 20:59
crc32 比 md5 更快更短,来一发:- @echo off
- for /f "tokens=1*" %%a in ('hash /a::-d /crc32') do (
- set file=%%b
- if defined crc32[%%a] (
- setlocal enabledelayedexpansion
- del "!file!" "!crc32[%%a]!"
- endlocal
- )
- set "crc32[%%a]=%%b"
- )
复制代码
hash.exe需单独下载:http://bbs.bathome.net/thread-30609-1-1.html
作者: CrLf 时间: 2015-1-15 21:23
如果按楼主要求以大小和修改时间为依据,powershell 很方便:- dir | where{$_.PSIsContainer -eq $false} | group length,LastWriteTime | where{$_.count -gt 1} | select group | del
复制代码
作者: CrLf 时间: 2015-1-15 21:49
来个 bat+js:- 1>1/* :
- @echo off
- dir /a-d | cscript -nologo -e:jscript "%~0"
- pause & exit /b */
-
- var map = {}
- var arr = WScript.StdIn.ReadAll().match(/^\d.+$/gm)
-
- for(var i=0;i<arr.length;i++){
- var match = arr[i].match(/(.{35}) (.*)/)
- map[match[1]] ? map[match[1]].push(match[2]) : map[match[1]]=[match[2]]
- }
-
- for(var i in map){
- if(map[i].length>1)WScript.Echo(map[i].join('\r\n'))
- }
复制代码
作者: 小文 时间: 2015-1-15 23:48
一个比一个厉害呀!谢谢DAIC,谢谢CrLf!JS也可以像bat和vbs一样用吗?
作者: CrLf 时间: 2015-1-16 01:17
回复 6# 小文
忘了说,5 楼代码是要保存为 bat 运行的
jscript 的宿主 wscript.exe 和 cscript.exe 支持以指定的语言来运行脚本,所以可以把某些不同语言的脚本写在同一个文件里
js 支持多行注释,所以和 bat 混编有天然优势,vbs 虽然也可以,但很牵强
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |