标题: [文件操作] 【已解决】求批处理列出小于10m的文件的路径 [打印本页]
作者: 我是一只小小鸟 时间: 2018-7-3 22:39 标题: 【已解决】求批处理列出小于10m的文件的路径
本帖最后由 我是一只小小鸟 于 2018-7-4 07:59 编辑
- title %~0
- (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 编辑
- @echo off
- setlocal enabledelayedexpansion
- set "space= "
- set info=大小/单位%space%
- echo;!info:~0,12! 文件名
- for /f "delims=" %%a in ('dir /a-d /b /os') do (
- if %%~za lss 1024 (
- set /a num=%%~za
- set size=%space%!num!
- set unit=B%space%
- echo;!size:~-5! !unit:~0,6! %%~fa
- ) else (
- if %%~za lss 1048576 (
- set /a num=%%~za/1024
- set size=%space%!num!
- set unit=KB%space%
- echo;!size:~-5! !unit:~0,6! %%~fa
- ) else (
- if %%~za leq 10485760 (
- set /a num=%%~za/1048576
- set size=%space%!num!
- set unit=MB%space%
- echo;!size:~-5! !unit:~0,6! %%~fa
- ))))
- pause&exit
复制代码
相关参考:http://www.bathome.net/thread-35936-1-3.html
作者: /zhqsystem/zhq 时间: 2018-7-4 01:13
- for /f "tokens=* delims=" %%i in ('dir/a-d/s/b ".\*.*"')do if /i not "%%~fi"=="%~f0" call:1 "%%~fi"
- pause
- goto:eof
- :1
- set "#="
- set "#=%~f1"
- set "#=%#:\=\\%"
- Wmic.exe datafile Where 'Name="%#%" And FileSize^<"10485760"' get FileSize,Name /format:list
- 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
没有必要舍近求远- @echo off
- (for /f "delims=" %%a in ('dir /a-d /b /s') do (
- if %%~za lss 10485760 (
- echo;%%a
- )
- ))>"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语言版:- import os
-
- for f in walkDirRec(getAppDir(),{pcFile}):
- if getFileSize(f) < 1024*1024*10 :
- 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 编辑
我用管理员的方法在我电脑上对比了一下结果:- d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process 6.bat -wait}" | findstr
- "TotalSeconds"
- TotalSeconds : 0.3320223
-
- d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process 3.bat -wait}" | findstr
- "TotalSeconds"
- TotalSeconds : 4.8222866
-
- d:\gayhub\FCNNIC\nimwalkfiles>powershell -c "Measure-Command {Start-Process nimwalkfiles.exe -wait}" | findstr "TotalSeconds"
- TotalSeconds : 0.3587203
复制代码
笔记本 3代I7 固态硬盘
完整的nim语言代码,nim语言里可以方便地过程重载出像批处理和shell用 > 操作符写文件:- import os
-
- proc `>`(content, filename: string) =
- writeFile(filename, content)
-
- var result = ""
- for f in walkDirRec(getAppDir(),{pcFile}):
- if getFileSize(f) < 1024*1024*10 :
- result.add(f)
- result.add("\r\n")
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |