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

[系统相关] 获取某个路径(包含子文件夹)下的文件名、时间、路径、大小

求助大神,我这里百度找了2段代码,
源代码1:优点:有名称、时间、路径、大小。缺点:文件大小为字节数,无法换算为MB  GB
源代码2:优点:大小可以换算为MB,GB。缺点:无时间、路径。
我的诉求是:文件名、时间、路径、大小(mb的显示mb,gb的显示gb),请大神帮忙看看



源代码1
  1. for /f "delims=" %%a in ('dir/s/b/c D:\1\*') do (
  2. echo %date%;%time%>>E:\输出.txt
  3. echo  文件路径:%%~a >>  E:\输出.txt
  4. echo 文件大小:%%~za字节 >>   E:输出.txt
  5. )
复制代码
源代码2
  1. @if(0)==(0) echo off & dir /b /s /on/a-d  D:\1\*  | CScript -NoLogo -E:JScript %0    >文件名_大小.txt &  pause & exit @end
  2. var fso=new ActiveXObject("Scripting.FileSystemObject");
  3. var k=1024, m=1048576, g=1073741824;
  4. while (!WScript.StdIn.AtEndOfStream){
  5.     var name = WScript.StdIn.ReadLine();
  6.     var f =fso.GetFile(name)
  7.     WSH.Echo(f.name,filesize(f.size),f.date,f.time)
  8. };
  9. function filesize(size) {
  10.     switch(true){
  11.         case size>g :
  12.             size = (size/g).toFixed(2) + ' GB';
  13.             break;
  14.         case size>m :
  15.             size = (size/m).toFixed(2) + ' MB';
  16.             break;
  17.         case size>k :
  18.             size = (size/k).toFixed(2) + ' KB';
  19.             break;
  20.         default :
  21.             size = size + ' 字节';
  22.     };
  23.     return size;
  24. }
复制代码

适用于数量不是太多,以免影响速度。若10万以上可以不用。须换NET版才能提速。
POWERSHELL 运行。
  1. $Lists = New-Object System.Text.StringBuilder;
  2. $files = ls 'D:\1\' -r | ?{$_.Directory};
  3. $m = $files.Count.tostring().Length;
  4. Foreach ( $i in $files )
  5. {
  6. $index++;
  7. $ref = $i.Length;
  8. switch ( $ref.tostring().length )
  9. {
  10. {$_ -le 3} { $length = "{0:0.000} Byte" -f ($ref);break}
  11. {$_ -le 6} { $length = "{0:0.000} KB" -f ($ref/1KB);break}
  12. {$_ -le 9} { $length = "{0:0.000} MB" -f ($ref/1MB);break}
  13. $_ { $length = "{0:0.000} GB" -f ($ref/1GB)}
  14. }
  15. $n = '[' + $index.tostring().padleft($m,' ') + ']';
  16. [void]$Lists.AppendLine($n+' '+$i.name);
  17. [void]$Lists.AppendLine(' '*($m+3)+$length);
  18. [void]$Lists.AppendLine(' '*($m+3)+$i.LastWriteTime);
  19. [void]$Lists.AppendLine(' '*($m+3)+$i.FullName);
  20. [void]$Lists.AppendLine('');
  21. }
  22. [IO.File]::WriteAllLines("$pwd\输出.log",$Lists,[text.encoding]::Default);
复制代码

TOP

回复 2# xczxczxcz


    可以运行,感谢

TOP

返回列表