标题: [文件操作] 求助,文件通过修改日期判断新旧的批处理该怎么写 [打印本页]
作者: lhw 时间: 2024-10-16 18:55 标题: 求助,文件通过修改日期判断新旧的批处理该怎么写
求助,两个文件夹里面有相同名称的多个文件,看文件内容不好归类文件的新旧,只能通过修改日期对比,想使用批处理能自动对比文件修改日期,删除旧的文件,保留新的文件,想请教一下达到这样的效果该怎么写,请大家指点以下。
作者: ppll2030 时间: 2024-10-16 21:22
本帖最后由 ppll2030 于 2024-10-17 22:59 编辑
回复 1# lhw
代码保存为ANSI编码的bat文件,
假设两个文件夹名分别为11和22,把bat文件跟两个文件夹放一块,然后运行即可。
具体文件夹路径请自行修改。- @echo off
- set "D1=11"
- set "D2=22"
- pushd %D1%
- for /f "delims=" %%a in ('dir /b /a-d') do (
- if exist "..\%D2%\%%a" for %%b in ("..\%D2%\%%a") do (
- rem 测试无误后,删除两个 echo 即为执行删除旧文件和同日期的多余文件
- if "%%~ta" geq "%%~tb" (echo del/q ..\%D2%\%%a) else echo del/q %%a)
- )
- popd&pause&exit/b
复制代码
作者: 77七 时间: 2024-10-17 10:05
回复 2# ppll2030
这样会扩展到工作目录下的 %%a吧,如果没有就是空值
作者: 77七 时间: 2024-10-17 10:11
如果文件无所谓在 a\ 或者 b\,可以试试robocopy 移动 a\ 下的文件到 b\复制代码
- robocopy "d:\a" "d:\b" /mov /xo
复制代码
作者: aloha20200628 时间: 2024-10-17 11:53
本帖最后由 aloha20200628 于 2024-10-17 12:48 编辑
回复 1# lhw
先比较两个目标目录d1和d2的文件数量,择其少者为要遍历的基准目录d1,代码中假设两个目标目录均为绝对路径,可由楼主自定义...
- @echo off &setlocal
- set "d1=d:\abc"
- set "d2=d:\xyz"
- for /f %%n in ('dir /b/a-d "%d1%"^|find /c /v "" ') do set "n1=%%n"
- for /f %%n in ('dir /b/a-d "%d2%"^|find /c /v "" ') do set "n2=%%n"
- if %n1% gtr %n2% set "d1=%d2%" &set "d2=%d1%"
- for %%a in ("%d1%\*") do if exist "%d2%\%%~nxa" for /f "delims=" %%b in ("%d2%\%%~nxa") do if "%%~ta" lss "%%~tb" (echo,删除同名旧版本》"%%~a"&del/q "%%~a") else (echo,删除同名旧版本》"%%~b"&del/q "%%~b")
- endlocal&pause&exit/b
复制代码
作者: ppll2030 时间: 2024-10-17 21:42
回复 3# 77七
不会对工作目录(D1,D2和bat脚本所在的文件夹)下的文件进行操作。
脚本已经指定D1,D2这两个目录了,且不会对该目录下的子文件夹的文件进行操作。
操作顺序是先列出D1的文件,再根据D1中的文件查询D2中是否有相同文件名文件,
然后才比对这两个文件,最后保留日期较新的文件,相同日期的文件就删除D2中的文件。
作者: 77七 时间: 2024-10-17 22:05
回复 6# ppll2030
- set "D1=.\11"
- for /f "delims=" %%a in ('dir /b /a-d "%D1%"') do (
- echo %%~ta
- )
复制代码
这样不会扩展 d1\%%a,会扩展 工作目录下的 %%a
作者: ppll2030 时间: 2024-10-17 22:58
回复 7# 77七
哈哈,感谢大佬指点。
工作目录是自己想当然了。
二楼脚本已更新。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |