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

文件名排序的 你这样试试
dir /on 文件名  /os 是按大小 竟然错了 改下
  1. @if(0)==(0) echo off & dir /b /s /on/a-d | 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))
  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. }
复制代码
下面是文件大小排序
  1. @if(0)==(0) echo off & CScript -NoLogo -E:JScript %0 >文件名_大小.txt &  pause & exit @end
  2. var fso=new ActiveXObject("Scripting.FileSystemObject");
  3. var Folder = fso.GetFolder(WScript.Arguments.Count()?WScript.Arguments.Item(0):".");
  4. var arr=[], i=0, k=1024, m=1048576, g=1073741824;
  5. for(var e = new Enumerator(Folder.Files);!e.atEnd();e.moveNext()){
  6.   var f = e.item();
  7.   arr.push([f.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.    var size = arr[i][1];
  12.    switch(true){
  13.         case size<k :
  14.             WSH.Echo(arr[i][0],'\t' + size,' Byte');
  15.             break;
  16.         case size<m :
  17.             WSH.Echo(arr[i][0],'\t' + (size/k).toFixed(2),' KB');
  18.             break;
  19.         case size<g :
  20.             WSH.Echo(arr[i][0],'\t' + (size/m).toFixed(2),' MB');
  21.             break;
  22.         default :
  23.             WSH.Echo(arr[i][0],'\t' + (size/g).toFixed(2),' GB');
  24.     }
  25. }
复制代码
1

评分人数

TOP

本帖最后由 dragon631 于 2015-6-3 04:37 编辑

回复 6# pcl_test

这个兼顾到了字节、KB、MB,已经很不错了!
能不能再加上超过1GB的,单位使用GB?并且MB和GB单位后面带两位小数点?因为这样子显示出来的话,更符合实际情况!

TOP

回复 5# dragon631

不知你怎么查资料的,自行在命令提示符下输入dir /? ,回车后查看/os的作用
  1. ::适用最大文件大小不超过2G的
  2. @echo off
  3. (for /f "delims=" %%a in ('dir /a-d /b /os^|find /i /v "%~nx0"') do (
  4. if %%~za lss 1024 (
  5. echo;%%a %%~za字节
  6. ) else (
  7. if %%~za lss 1048576 (
  8. set /a size=%%~za/1024 2>nul&&call echo;%%a %%size%%KB
  9. ) else (
  10. set /a size=%%~za/1048576 2>nul&&call echo;%%a %%size%%MB
  11. ))))>"文件名及大小.txt"
  12. pause
复制代码

TOP

本帖最后由 dragon631 于 2015-6-2 23:20 编辑

回复 4# pcl_test

刚在边测试边百度,边修改回复内容,实际上,上面的代码是让它文件首拼音排列的!

原代码对于电影这些个大文件用起来比较顺手,对于图片这些稍小的文件就有点不适用了,所以,原代码的基础上,稍微变动了下,让它以KB显示

::最大文件大小不超过2G的可以这样
@echo off & setlocal enabledelayedexpansion
(for /f "delims=" %%a in ('dir /a-d /b /os^|find /i /v "%~nx0"') do set /a size=%%~za/1024 2>nul&&echo;%%a !size!KB)>"文件名及大小.txt"
pause

还有其它地方需要变动了吗?

TOP

本帖最后由 pcl_test 于 2015-6-2 22:30 编辑

回复 3# dragon631

大概你没测试,/os就是以文件大小升序排列,所以没必要再加/o
dir /a-d /b /os

TOP

本帖最后由 dragon631 于 2015-6-3 18:00 编辑

回复 2# pcl_test

::最大文件大小不超过2G的可以这样
@echo off & setlocal enabledelayedexpansion
(for /f "delims=" %%a in ('dir /a-d /b /o^|find /i /v "%~nx0"') do set /a size=%%~za/1048576 2>nul&&echo;%%a !size!MB)>"文件名及大小.txt"
pause

这个代码让文件以拼音首字母顺序排列。

TOP

本帖最后由 pcl_test 于 2016-9-25 08:58 编辑
  1. ::最大文件大小不超过2G的可以这样
  2. @echo off
  3. (for /f "delims=" %%a in ('dir /a-d /b /os^|find /i /v "%~nx0"') do set /a size=%%~za/1048576 2>nul&&call echo;%%a %%size%%MB)>"文件名及大小.txt"
  4. pause
复制代码

TOP

返回列表