[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何以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
修改了一下,看行不,这个是能显示子目录的,
  1. @if(0)==(0) echo off & dir /b /s /os/a-d "c:\test" | CScript -NoLogo -E:JScript %0 >文件名_大小.txt &  pause & exit @end
  2. var fso=new ActiveXObject("Scripting.FileSystemObject");
  3. var arr=[], k=1024, m=1048576, g=1073741824;
  4. while (!WScript.StdIn.AtEndOfStream){
  5.     var name = WScript.StdIn.ReadLine();
  6.     var f =fso.GetFile(name)
  7.     arr.push([name,f.size]);
  8. };
  9. arr = arr.sort(function(a,b){ return a[1] - b[1]});
  10. for (i = 0,len = arr.length; i < len; i++) {
  11.     WSH.Echo(arr[i][0],filesize(arr[i][1]))
  12. }
  13. function filesize(size) {
  14.     switch(true){
  15.         case size>g :
  16.             size = (size/g).toFixed(2) + ' GB';
  17.             break;
  18.         case size>m :
  19.             size = (size/m).toFixed(2) + ' MB';
  20.             break;
  21.         case size>k :
  22.             size = (size/k).toFixed(2) + ' KB';
  23.             break;
  24.         default :
  25.             size = size + ' 字节';
  26.     };
  27.     return size;
  28. }
复制代码
1

评分人数

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

TOP

回复 31# terse

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

TOP

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

TOP

回复 28# terse


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

TOP

]'\
回复 28# terse

加个    "c:\test"   ?

TOP

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

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为单位提取文件大小及文件名,以名称为排序方式的批处理。
  1. ::最大文件大小不超过2G的可以这样
  2. @echo off
  3. (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"
  4. pause
复制代码

TOP

返回列表