Board logo

标题: [其他] 求助批处理 多个盘里有相同的文件 如何 搜索最新创建的这个特定文件 [打印本页]

作者: zhuzhihua422619    时间: 2021-10-14 21:44     标题: 求助批处理 多个盘里有相同的文件 如何 搜索最新创建的这个特定文件

如题   现在有需求 查找某个文件 (多个同名文件 在不同的文件夹 和不同的盘里面) 然后取最新创建的那个
作者: aloha20200628    时间: 2021-10-15 17:56

利用dos系统三个命令 dir, findstr, sort 通过管道操作可能会解决你的问题。
CMD窗口下的命令行代码如下:
dir /s/o-d "c:\目录-1\同一文件名" "d:\目录-2\同一文件名" "e:\目录-3\同一文件名" | findstr /c:"同一文件名" | sort /r
如果只查找一个目录,可省去最后的 sort 调用。
如果是全盘查找尤其是c盘(系统盘)可能会很漫长。
作者: dos大帝    时间: 2021-10-15 22:09

本帖最后由 dos大帝 于 2021-10-17 16:57 编辑
  1. @echo off & setLocal enableDelayedExpansion
  2. goto comment
  3.     找出创建时间最晚的, 名字完全符合的文件
  4.     不查找系统文件和隐藏文件
  5.     创建时间精确到分, 同一分钟创建的文件不做排序
  6.     随着查找的进行, 所耗内存越来越大, 不建议一下找完全部路径, 可分别输入搜索路径
  7.     搜索文件名有中文注意bat编码用GKB
  8. :comment
  9. rem 在下面输入要查找的路径, 文件名及后缀
  10. set devices="D:\folder\" "E:\"
  11. set file_name="test.txt"
  12. for %%i in (%devices%) do (
  13.     echo.
  14.     echo start_find %%i
  15.     pushd %%i
  16.     for /r %%j in (*.*) do (
  17.         if "%%~nxj" == %file_name% (
  18.             echo %%~dpnxj
  19.             set find_file=!find_file! "%%j"
  20.         )
  21.     )
  22.     popd
  23. )
  24. for %%i in (%find_file%) do (
  25.     for /f "tokens=1-3,*" %%a in ('dir "%%~i" /tc') do (
  26.         if "%%d" == %file_name% (
  27.             if defined result_str (
  28.                 rem 比较时间大小,找出最新创建的
  29.                 set new_ytd=%%a
  30.                 set new_hm=%%b
  31.                 set new_time="!new_ytd:~0,4!!new_ytd:~5,2!!new_ytd:~8,2!!new_hm:~0,2!!new_hm:~3,2!"
  32.                 set old_time="!result_str:~0,4!!result_str:~5,2!!result_str:~8,2!!result_str:~11,2!!result_str:~14,2!"
  33.                 if !new_time! gtr !old_time! (
  34.                 set result_str=%%a %%b %%~i
  35.                 )
  36.             ) else (
  37.                 set result_str=%%a %%b %%~i
  38.             )
  39.         )
  40.     )
  41. )
  42. echo.
  43. for /f "tokens=1-2,*" %%i in ("!result_str!") do (
  44.     echo create_time: %%i %%j
  45.     echo path:        %%k
  46. )
  47. pause
复制代码





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