[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a maxSize = 500 * 1024 * 1024, n = 1, size = 0
  4. for /f "delims=" %%i in ('dir /b *.txt') do (
  5.     set /a size += %%~zi
  6.     if !size! GTR !maxSize! (
  7.         set /a n += 1, size = %%~zi
  8.     )
  9.     md 2014-!n! 2>nul
  10.     move "%%i" 2014-!n!\
  11. )
  12. pause
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2020-12-16 17:21 编辑

回复 5# bataiping


    cmd 数值计算本身就是弱项,如果单个文件超过 2GB,或者输入浮点数,会很麻烦。可以考虑其它办法。
Test.PS1
  1. $input = Read-Host('输入最大限制数(单位MB)');
  2. if( $input -notmatch '^(?:[1-9]\d+|\d)(?:\.\d+)?$' ){
  3.     echo '输入错误';
  4.     [Console]::ReadKey();
  5.     exit;
  6. }
  7. [Collections.ArrayList]$arr = @();
  8. $maxSize = 1024 * 1024 * $input;
  9. $n = 1001;
  10. $size = 0;
  11. $myPath = [IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path); #脚本所在目录
  12. $preFix = $myPath.Split('\')[-1] + '-';
  13. $file = dir -Literal $myPath -Filter *.pdf | ?{ $_ -is [IO.FileInfo] };
  14. for( $i=0; $i -lt $file.Count; $i++ ){
  15.     $size += $file[$i].Length;
  16.     if( $size -gt $maxSize ){
  17.         if( $i -gt 0 ){ $n++; }
  18.         $size = $file[$i].Length;
  19.     }
  20.     $fd = $myPath + '\' + $preFix + ('' + $n).SubString(1);    #新目录 = 前缀 + 3位数字
  21.     if( ![IO.Directory]::Exists($fd) ){
  22.         $null = md $fd;                                        #创建新目录
  23.     }
  24.     mv -Literal $file[$i].FullName -Dest ($fd + '\') -Force;   #移动文件
  25.     if( $file[$i].Length -gt $maxSize ){
  26.         [void]$arr.Add( $fd + ' 超过' + $input + 'MB' );
  27.     }
  28. }
  29. if( $arr.Count -gt 0 ){ sc -Literal ($myPath + '\error.Log') -Value $arr; }
  30. echo 'Done';
  31. [Console]::ReadKey();
复制代码

TOP

回复 4# akb4888


    你发一个新帖吧,有时间我帮你改。

TOP

返回列表