标题: [文本处理] [已解决]批处理怎么获取目录下文件大小少于5M的文件夹列表? [打印本页]
作者: itunesis 时间: 2020-5-28 00:17 标题: [已解决]批处理怎么获取目录下文件大小少于5M的文件夹列表?
目录下有N个文件夹,希望扫描目录下文件,把包含文件大小少于5M的文件夹名生成一个txt
文件大小是指所有文件加起来小于5M,不是单一文件。
把文件夹名列出来,不是文件。
大神该怎么写??
作者: smss 时间: 2020-5-28 00:51
本帖最后由 smss 于 2020-5-28 01:07 编辑
- @echo off&setlocal enabledelayedexpansion&set m=1048576
- (for /f "tokens=*" %%i in ('dir /ad /b') do (set size=000
- for /f "eol=0tokens=3" %%j in ('dir /s/a/-c "%%i" 2^>nul^| findstr /i "个文件.*字节$"') do set "size=%%j00"
- if !size! geq 102400 (if !size! geq 104857600 (set s=MB&set t=!size!&set len=!t:~9!98765432100&set /alen=9+!len:~10,1!&set/a "r=!t:~,8!%%m,size=!t:~,8!/m"
- for /l %%j in (8 1 !len!) do set/a "q=!r!!t:~%%j,1!/m,r=!r!!t:~%%j,1!%%m"&set "size=!size!!q!"
- if !size! geq 102400 set s=GB&set /asize/=1024)else set s=KB&set /asize/=1024)else set s=Byte
- if "!size!" GTR "5" echo %%i !size:~,-2!.!size:~-2! !s!))>结果.TXT&start "" 结果.TXT&pause
复制代码
参考http://www.bathome.net/thread-31593-1-1.html http://bbs.bathome.net/viewthread.php?tid=25682
作者: went 时间: 2020-5-28 11:05
本帖最后由 went 于 2020-5-28 11:29 编辑
for /r /d 参数的作用来了
dir是主文件夹,max是最大字节数
如果要递归处理子文件夹,使用第5行,把第6行REM起来- @echo off
- setlocal enabledelayedexpansion
- set "dir=D:\Notepad++"
- set "max=5242880"
- REM for /r "%dir%" /d %%i in ("*") do call :getFolderSize "%%i"
- for /d %%i in ("%dir%\*") do call :getFolderSize "%%i"
- pause&exit
- :getFolderSize
- set "size=0"
- for /r "%~1" %%i in ("*") do ( set /a "size+=%%~zi" & if !size! gtr %max% goto :eof )
- if !size! leq 1024 ( echo !size!B %~1 & goto :eof )
- if !size! leq 1048576 ( set /a "size/=1024" & echo !size!KB %~1 & goto :eof )
- set /a "size=!size!/1024/1024" & echo !size!MB %~1 & goto :eof )
复制代码
作者: itunesis 时间: 2020-5-28 22:32
回复 3# went
老哥,能不能改成是bat放在哪个目录下就自动扫描当前目录的文件夹,并且把文件夹列表生成一个txt文件呢?
作者: went 时间: 2020-5-29 10:33
回复 4# itunesis
set "dir=%~dp0"即可
生成dirList.txt,两位小数- @echo off
- setlocal enabledelayedexpansion
- set "dir=%~dp0"
- set "max=5242880"
- (
- REM for /r "%dir%" /d %%i in ("*") do call :getFolderSize "%%i"
- for /d %%i in ("%dir%*") do call :getFolderSize "%%i"
- )>"%~dp0dirList.txt"
- type "%~dp0dirList.txt"
- echo ----------------------
- echo out file: %~dp0dirList.txt
- echo ----------------------
- pause&exit
-
- :getFolderSize
- set "size=0"
- for /r "%~1" %%i in ("*") do ( set /a "size+=%%~zi" & if !size! gtr %max% goto :eof )
- if !size! leq 1024 ( set "unit=B" & goto :show )
- if !size! leq 1048576 ( set "unit=KB" & set /a "size=!size!*100/1024" & set "size=!size:~0,-2!.!size:~-2!" & goto :show )
- set "unit=MB" & set /a "size=!size!*100/1024/1024" & set "size=!size:~0,-2!.!size:~-2!"
- :show
- set "size=%size%%unit% "
- echo %size:~0,10% %~1
复制代码
作者: itunesis 时间: 2020-5-31 09:39
回复 5# went
不好意思老哥,就是还有一个小小的问题。
那个输出的txt文件里面的列表能不能只显示文件夹名,文件大小和路径都不要显示。
就是只把文件夹名列出来就可以了。
不好意思老哥,麻烦你这么多次。
作者: went 时间: 2020-5-31 10:11
看你意思是不用处理子文件夹- @echo off
- setlocal enabledelayedexpansion
- set "dir=%~dp0"
- set "max=5242880"
- ( for /d %%i in ("%dir%\*") do call :getFolderSize "%%i" )>"%~dp0dirList.txt"
- type "%~dp0dirList.txt"
- echo ----------------------
- echo out file: %~dp0dirList.txt
- echo ----------------------
- pause&exit
-
- :getFolderSize
- set "size=0"
- for /r "%~1" %%i in ("*") do ( set /a "size+=%%~zi" & if !size! gtr %max% goto :eof )
- echo %~nx1
复制代码
作者: itunesis 时间: 2020-6-1 22:34
回复 7# went
非常感谢,完美!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |