返回列表 发帖

[文件操作] [已解决]批处理如何以MB为单位批量提取文件大小及文件名?

“dir >a.txt”可以将目录下文件的修改日期、大小、文件名发送至文本文档a中。

1.里面的文件大小的单位使用的是字节,如果想让它以MB的方式显示,且按文件大小升序排列在文本文档a中,代码该如何写?
2.如果只想在文本文档a显示文件名和文件大小,大小以MB显示,且按文件大小升序排列,代码又该如何写?

希望懂行的热心人能指点一下!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 36# terse


    谢谢老师的帮助!!

TOP

本帖最后由 terse 于 2023-4-2 17:33 编辑

回复 34# ww0000
对了 这个是名称排序的
arr = arr.sort(function(a,b){ return a[0] - b[0]});

其实 第一排 dir /b /s /a-d 这个按名称排序的 可以直接输出的
1

评分人数

    • ww0000: 感谢帮助!技术 + 1

TOP

回复 34# ww0000
dir 参数 /os 换为 /on

TOP

回复 33# terse


    谢谢,可以获取子目录的,另外能不能按文件名排序呢?

TOP

回复 32# ww0000
修改了一下,看行不,这个是能显示子目录的,
@if(0)==(0) echo off & dir /b /s /os/a-d "c:\test" | CScript -NoLogo -E:JScript %0 >文件名_大小.txt &  pause & exit @end
var fso=new ActiveXObject("Scripting.FileSystemObject");
var arr=[], k=1024, m=1048576, g=1073741824;
while (!WScript.StdIn.AtEndOfStream){
    var name = WScript.StdIn.ReadLine();
    var f =fso.GetFile(name)
    arr.push([name,f.size]);
};
arr = arr.sort(function(a,b){ return a[1] - b[1]});
for (i = 0,len = arr.length; i < len; i++) {
    WSH.Echo(arr[i][0],filesize(arr[i][1]))
}
function filesize(size) {
    switch(true){
        case size>g :
            size = (size/g).toFixed(2) + ' GB';
            break;
        case size>m :
            size = (size/m).toFixed(2) + ' MB';
            break;
        case size>k :
            size = (size/k).toFixed(2) + ' KB';
            break;
        default :
            size = size + ' 字节';
    };
    return size;
}COPY
1

评分人数

    • ww0000: 感谢帮助!技术 + 1

TOP

回复 31# terse

是这个意思,但只能获取当前路径,不能获取子目录的路径

TOP

回复 30# ww0000
是这个意思吗
第七行 f.Name前加上路径 Folder
    Folder+'\\'+f.Name   COPY

TOP

回复 28# terse


    我是说,输出的TXT文本中,除了文件名、大小,文件名前还要带路径

TOP

]'\
回复 28# terse

加个    "c:\test"   ?

TOP

回复 27# ww0000
修改第一排
@if(0)==(0) echo off & CScript -NoLogo -E:JScript %0 "c:\test">文件名_大小.txt &  pause & exit @endCOPY

TOP

回复 8# terse


    老师,这个能加上路径吗?

TOP

回复  pcl_test
太感谢了!好人啊!
最后贴出来,以便别人哪天需要这个批处理时也能找到答案。

以MB为 ...
ahh 发表于 2016-9-25 18:52





超过2G如何操作?

TOP

回复 8# terse


    怎么可以过滤这个结果中,文件修改时间最新的那条记录呢?

TOP

本帖最后由 ahh 于 2016-9-25 18:53 编辑

回复 23# pcl_test
太感谢了!好人啊!
最后贴出来,以便别人哪天需要这个批处理时也能找到答案。

以MB为单位提取文件大小及文件名,以名称为排序方式的批处理。
::最大文件大小不超过2G的可以这样
@echo off
(for /f "delims=" %%a in ('dir /a-d /b^|find /i /v "%~nx0"') do set /a size=%%~za/1048576 2>nul&&call echo;%%a %%size%%MB)>"文件名及大小.txt"
pauseCOPY

TOP

返回列表