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

[文件操作] 求助,文件通过修改日期判断新旧的批处理该怎么写

求助,两个文件夹里面有相同名称的多个文件,看文件内容不好归类文件的新旧,只能通过修改日期对比,想使用批处理能自动对比文件修改日期,删除旧的文件,保留新的文件,想请教一下达到这样的效果该怎么写,请大家指点以下。

本帖最后由 ppll2030 于 2024-10-17 22:59 编辑

回复 1# lhw


    代码保存为ANSI编码的bat文件,
假设两个文件夹名分别为11和22,把bat文件跟两个文件夹放一块,然后运行即可。
具体文件夹路径请自行修改。
  1. @echo off
  2. set "D1=11"
  3. set "D2=22"
  4. pushd %D1%
  5. for /f "delims=" %%a in ('dir /b /a-d') do (
  6. if exist "..\%D2%\%%a" for %%b in ("..\%D2%\%%a") do (
  7. rem 测试无误后,删除两个 echo 即为执行删除旧文件和同日期的多余文件
  8. if "%%~ta" geq "%%~tb" (echo del/q ..\%D2%\%%a) else echo del/q %%a)
  9. )
  10. popd&pause&exit/b
复制代码

TOP

回复 2# ppll2030


   
这样会扩展到工作目录下的 %%a吧,如果没有就是空值
bat小白,请多指教!谢谢!

TOP

如果文件无所谓在 a\ 或者 b\,可以试试robocopy 移动 a\ 下的文件到 b\
  1. /XO :: 排除较旧的文件。
复制代码
  1. robocopy "d:\a" "d:\b" /mov /xo
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-10-17 12:48 编辑

回复 1# lhw

先比较两个目标目录d1和d2的文件数量,择其少者为要遍历的基准目录d1,代码中假设两个目标目录均为绝对路径,可由楼主自定义...
  1. @echo off &setlocal
  2. set "d1=d:\abc"
  3. set "d2=d:\xyz"
  4. for /f %%n in ('dir /b/a-d "%d1%"^|find /c /v "" ') do set "n1=%%n"
  5. for /f %%n in ('dir /b/a-d "%d2%"^|find /c /v "" ') do set "n2=%%n"
  6. if %n1% gtr %n2% set "d1=%d2%" &set "d2=%d1%"
  7. 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")
  8. endlocal&pause&exit/b
复制代码

TOP

回复 3# 77七

不会对工作目录(D1,D2和bat脚本所在的文件夹)下的文件进行操作。
脚本已经指定D1,D2这两个目录了,且不会对该目录下的子文件夹的文件进行操作。
操作顺序是先列出D1的文件,再根据D1中的文件查询D2中是否有相同文件名文件,
然后才比对这两个文件,最后保留日期较新的文件,相同日期的文件就删除D2中的文件。

TOP

回复 6# ppll2030


  
  1. set "D1=.\11"
  2. for /f "delims=" %%a in ('dir /b /a-d "%D1%"') do (
  3. echo %%~ta
  4. )
复制代码
这样不会扩展 d1\%%a,会扩展 工作目录下的 %%a
bat小白,请多指教!谢谢!

TOP

回复 7# 77七


    哈哈,感谢大佬指点。
工作目录是自己想当然了。
二楼脚本已更新。

TOP

返回列表