标题: [文件操作] 批处理如何查询大小超过30G的文件? [打印本页]
作者: kevinll 时间: 2013-3-27 11:53 标题: 批处理如何查询大小超过30G的文件?
我想查询一个目录下所有.DBF文件大小超过30G的,有的话输出到一个文本里,批处理如下:
批处理1:- @echo off
- set /a size=30*1024*1024*1024
- for /r %%i in (*.dbf) do if %%~zi GTR %size% echo "%%i" >check_size.txt
复制代码
批处理2:- @echo off
- for /r %%i in (*.dbf) do if %%~zi/30/1024/1024/1024 GTR 1 echo "%%i" >check_size.txt
复制代码
两个都有问题的,第一个溢出了,第二个查询不出来,我试了一个32G的文件。请大家帮忙看看,谢了!
作者: Demon 时间: 2013-3-27 12:05
32位CMD只支持32位有符号整数
作者: kevinll 时间: 2013-3-27 12:27
我的系统是64位的,那CMD应该也是64位的吧? 如果是因为数值太大的话,那么我的问题就无解了吗?
作者: kevinll 时间: 2013-3-27 12:29
字节能换成M或者G吗?这样位数就够了
作者: cjiabing 时间: 2013-3-27 12:46
改下思路:用dir搜索文本连带文件大小到一个txt中,再挑出超过大小的。
这样效率可能高点。
作者: kevinll 时间: 2013-3-27 13:56
如何用DIR只显示文本名字和文本大小呢?
作者: cutebe 时间: 2013-3-27 15:57
- @ECHO OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F "DELIMS=" %%S IN ('DIR/S/B/A-D *.DBF')DO (
- SET SIZE=0000000000%%~ZS
- IF "!SIZE:~-11!" GTR "32212254720" ECHO %%~S
- )
- PAUSE
复制代码
作者: Batcher 时间: 2013-3-27 22:23
复制代码
http://www.bathome.net/thread-1114-1-1.html
作者: kevinll 时间: 2013-3-28 09:39
本帖最后由 kevinll 于 2013-3-28 09:42 编辑
回复 7# cutebe
谢谢!测试了几次,都成功了。不过有个问题,这一句:SET SIZE=0000000000%%~ZS ,我看赋值后SIZE也是为-2147483648啊,前面补这么多0什么意思呢?
作者: kevinll 时间: 2013-3-28 10:00
回复 8# Batcher
您这个我试了,find.exe . -size +30G,报错了:
find.exe: invalid -size type `G'
用法是什么呢?能否把结果输出到一个文本里去呢?
作者: Batcher 时间: 2013-3-28 10:19
回复 10# kevinll - find.exe -size +30000000k
复制代码
作者: kevinll 时间: 2013-3-28 10:49
回复 9# kevinll
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=" %%S IN ('DIR/S/B/A-D *.DBF')DO (
SET SIZE=0000000000%%~ZS
IF "!SIZE:~-11!" GTR "32212254720" ECHO %%~S>>out.txt
)
PAUSE
发现了一个问题,不能递归,如果有子文件的话,返回的结果少
作者: kevinll 时间: 2013-3-28 10:54
回复 11# Batcher
这次可以运行了,不过能进行过滤吗?比如说查找.DBF文件。
还有命令没有帮助文档啊?我也下了几个别的命令,都没有发现帮助文档
作者: tmplinshi 时间: 2013-3-28 11:52
回复 Batcher
这次可以运行了,不过能进行过滤吗?比如说查找.DBF文件。
还有命令没有帮助文档 ...
kevinll 发表于 2013-3-28 10:54
- find.exe -name *.DBF -size +30000000k
复制代码
find --help 可以看到简单的帮助。详细的帮助可以在 Google 中搜索 unix find
作者: lucky5156 时间: 2013-3-28 11:59
新手学习之中……………………
作者: kevinll 时间: 2013-3-28 13:58
本帖最后由 kevinll 于 2013-3-28 14:24 编辑
我这还有问题,关于find.exe, 我指定-path 不管用,在windows上,-path怎么用呢?可以这样吗:-path e:\data
作者: kevinll 时间: 2013-3-28 14:52
在windows上用UNIX的命令,每次用都要先COPY吗?
作者: kevinll 时间: 2013-3-28 15:24
试了一个 -size +1048576k,即1G,却查不出来,明明有一个24G的文件,:
find.exe -name *.DBF -size +1048576k
作者: tmplinshi 时间: 2013-3-28 17:33
试试这个:- ndir -s "-cond=size>=1*1024*1024*1024" f:\*.DBF
复制代码
http://thomaslauer.com/comp/ndir
作者: Batcher 时间: 2013-3-28 18:15
回复 13# kevinll - find.exe . -name "*.DBF" -size +30000000k
复制代码
教程:
http://bbs.chinaunix.net/thread-441883-1-1.html
作者: Batcher 时间: 2013-3-28 18:20
回复 17# kevinll
不需要,你可以把它放到当前目录。或者使用命令的完整路径C:\UnxUtils\find.exe
作者: cutebe 时间: 2013-3-29 08:40
回复 9# kevinll
把SIZE当作字符串来比较,而不是数值
作者: kevinll 时间: 2013-3-29 11:54
谢谢各位。不过谁给看i看这个问题啊:
试了一个 -size +1048576k,即1G,却查不出来,明明有一个24G的文件:
find.exe -name *.DBF -size +1048576k
作者: Batcher 时间: 2013-3-29 12:22
回复 23# kevinll
"*.DBF"双引号不要丢
作者: terse 时间: 2013-4-1 14:03
- @echo off
- set ph=e:\b\&set ext=dbf
- set FileSize=123456789
- for /f "tokens=*" %%i in ("%ph%") do set d=%%~di&set "p=%%~pi"
- wmic datafile where "drive='%d%' and path='%p:\=\\%' and extension='%ext%' and FileSize>='%FileSize%'" get FileName
- pause
复制代码
作者: piszhao19870928 时间: 2013-4-2 20:35
@echo off
set /a size=30*1024*1024*1024
for /r %%i in (*.dbf) do if %%~zi GTR %size% echo "%%i" >>check_size.txt
作者: CrLf 时间: 2013-4-2 23:18
- @echo off
- set /a min=30*1024*1024*1024
- set "min=000000000000000000%min%"
- set "min=%min:~-20%"
- for %%a in (*.dbf) do (
- set "file=%%a"
- set "size=000000000000000000%%~za"
- setlocal enabledelayedexpansion
- if !size:~-20! gtr !min! echo !file!
- endlocal
- )
- pause
复制代码
作者: CrLf 时间: 2013-4-2 23:20
- @echo off
- set /a min=30*1024*1024*1024
- set "min=000000000000000000%min%"
- set "min=%min:~-20%"
- (echo %min%
- for %%a in (*.dbf) do (
- set "file=%%a"
- set "size=000000000000000000%%~za"
- setlocal enabledelayedexpansion
- echo !size:~-20!:!file!
- endlocal
- ))>tmp.txt
- for /f "tokens=1* delims=:" %%a in ('sort tmp.txt') do (
- if defined flag echo;%%b
- if %%a==%min% set flag=yes
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |