Board logo

标题: [文件操作] 【已解决】求批处理列出小于10m的文件的路径 [打印本页]

作者: 我是一只小小鸟    时间: 2018-7-3 22:39     标题: 【已解决】求批处理列出小于10m的文件的路径

本帖最后由 我是一只小小鸟 于 2018-7-4 07:59 编辑
  1. title %~0
  2. (for /f "delims=" %%a in ('dir /a-d/b/s "./"') do @echo;%%a)>"aa.txt"&pause
复制代码
上面这个代码,可以列出所有文件的路径,不过我想只列出文件小于10m的,这样应该如何修改呢?
作者: 狄钦dQ    时间: 2018-7-3 23:30

本帖最后由 狄钦dQ 于 2018-7-4 01:12 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "space=            "
  4. set info=大小/单位%space%
  5. echo;!info:~0,12! 文件名
  6. for /f "delims=" %%a in ('dir /a-d /b /os') do (
  7. if %%~za lss 1024 (
  8.     set /a num=%%~za
  9.     set size=%space%!num!
  10.     set unit=B%space%
  11.     echo;!size:~-5! !unit:~0,6! %%~fa
  12. ) else (
  13. if %%~za lss 1048576 (
  14.     set /a num=%%~za/1024
  15.     set size=%space%!num!
  16.     set unit=KB%space%
  17.     echo;!size:~-5! !unit:~0,6! %%~fa
  18. ) else (
  19. if %%~za leq 10485760 (
  20.     set /a num=%%~za/1048576
  21.     set size=%space%!num!
  22.     set unit=MB%space%
  23.     echo;!size:~-5! !unit:~0,6! %%~fa
  24. ))))
  25. pause&exit
复制代码
相关参考:http://www.bathome.net/thread-35936-1-3.html
作者: /zhqsystem/zhq    时间: 2018-7-4 01:13

  1. for /f "tokens=* delims=" %%i in ('dir/a-d/s/b ".\*.*"')do if /i not "%%~fi"=="%~f0" call:1 "%%~fi"
  2. pause
  3. goto:eof
  4. :1
  5. set "#="
  6. set "#=%~f1"
  7. set "#=%#:\=\\%"
  8. Wmic.exe datafile Where 'Name="%#%" And FileSize^<"10485760"' get FileSize,Name /format:list
  9. goto:eof
复制代码

作者: 我是一只小小鸟    时间: 2018-7-4 07:57

回复 3# /zhqsystem/zhq


    非常感谢
作者: 我是一只小小鸟    时间: 2018-7-4 07:58

回复 2# 狄钦dQ


      非常感谢
作者: Batcher    时间: 2018-7-4 08:30

回复 3# /zhqsystem/zhq


没有必要舍近求远
  1. @echo off
  2. (for /f "delims=" %%a in ('dir /a-d /b /s') do (
  3.     if %%~za lss 10485760 (
  4.         echo;%%a
  5.     )
  6. ))>"aa.txt"
复制代码

作者: /zhqsystem/zhq    时间: 2018-7-4 22:21

回复 6# Batcher


    这不是舍近求远WMIC自动过滤远高于IF判断
作者: codegay    时间: 2018-7-5 00:34

本帖最后由 codegay 于 2018-7-5 01:50 编辑

回复 6# Batcher


   
    论舍近求远。我来一个更远的。
nim语言版:
  1. import os
  2. for f in walkDirRec(getAppDir(),{pcFile}):
  3.     if getFileSize(f) < 1024*1024*10 :
  4.         echo f
复制代码

作者: Batcher    时间: 2018-7-5 08:45

回复 7# /zhqsystem/zhq


我的测试环境是Win7,测试目录下有28个文件
C:\Test>dir /b /s /a-d | find /c ":"
28

3楼代码测试耗时4.3秒
C:\Test>powershell -c "Measure-Command {Start-Process test.bat -wait}" | findstr "TotalSeconds"
TotalSeconds      : 4.3815649

6楼代码测试耗时2.5秒
C:\Test>powershell -c "Measure-Command {Start-Process test.bat -wait}" | findstr "TotalSeconds"
TotalSeconds      : 2.5144024

不知道你的测试环境和测试结果分别是怎样的呢?
作者: 我是一只小小鸟    时间: 2018-7-5 13:04

回复 9# Batcher


    感谢管理员,给出了这么详细的解答。
作者: codegay    时间: 2018-7-6 01:24

本帖最后由 codegay 于 2018-7-6 01:29 编辑

我用管理员的方法在我电脑上对比了一下结果:
  1. d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process 6.bat -wait}" | findstr
  2. "TotalSeconds"
  3. TotalSeconds      : 0.3320223
  4. d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process 3.bat -wait}" | findstr
  5. "TotalSeconds"
  6. TotalSeconds      : 4.8222866
  7. d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process nimwalkfiles.exe -wait}" | findstr "TotalSeconds"
  8. TotalSeconds      : 0.3587203
复制代码
笔记本 3代I7 固态硬盘


完整的nim语言代码,nim语言里可以方便地过程重载出像批处理和shell用 > 操作符写文件:
  1. import os
  2. proc `>`(content, filename: string) =
  3.     writeFile(filename, content)
  4. var result = ""
  5. for f in walkDirRec(getAppDir(),{pcFile}):
  6.     if getFileSize(f) < 1024*1024*10 :
  7.         result.add(f)
  8.         result.add("\r\n")
  9.         result > "test.txt"
复制代码

作者: codegay    时间: 2018-7-6 01:30

可知管理员用的应该是机械硬盘。
作者: /zhqsystem/zhq    时间: 2018-7-6 21:48

回复 9# Batcher
这测试代码收下了不错很好玩,哈哈
wmic效率整体比if慢不到一倍,但是出错率为0

wmic:
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 420
Ticks             : 4208530
TotalDays         : 4.8709837962963E-06
TotalHours        : 0.000116903611111111
TotalMinutes      : 0.00701421666666667
TotalSeconds      : 0.420853
TotalMilliseconds : 420.853

for+dir+if
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 214
Ticks             : 2141939
TotalDays         : 2.47909606481481E-06
TotalHours        : 5.94983055555556E-05
TotalMinutes      : 0.00356989833333333
TotalSeconds      : 0.2141939
TotalMilliseconds : 214.1939




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