批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖
回复 8# xczxczxcz


  我把代码改成这样,你看可以吗?

$files =ls |?{$_.Directory};

$Begin, $n =0,1,$Len=0;
While ( $Begin -lt $files.Count )
{
    $name =$n.ToString().PadLeft(3,'0')+'.rar';
     
    While ( $Len -lt 19.5MB)
    {
      Len=Len+Get-Item $name).Length;
      & rar
    }
     Len=0;
}

TOP

本帖最后由 xczxczxcz 于 2019-6-19 17:22 编辑

回复 31# netdzb

一、肯定不能运行。
二、不会处理子目录。

再给你写个 带子目录的。用法同前。若嫌目录太长,可把工作文件夹放到磁盘根目录。这样简单,不需要过多处理。
下面的脚本不处理:当有一个文件大于设定值时,会无限循环。所以假设你的每一个文件都不会超过设定的值。
  1. $files =ls -rec |?{$_.Directory};
  2. $Size = 19.5; #自定义大小,
  3. $index, $n =0,1;
  4. While ( $index -lt $files.Count )
  5. {
  6. $name =$n.ToString().PadLeft(3,'0')+'.rar';
  7. & rar a $name $files[$index].FullName|Out-Null;
  8. if ((Get-Item $name).Length/1MB -gt $Size) {
  9. $del =$files[$index].FullName -replace '^\w:\\';
  10. & rar d $name $del | Out-Null;
  11. $n++;
  12. } else { $index++ }
  13. }
复制代码

TOP

本帖最后由 smss 于 2019-6-19 21:36 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b *.*') do (set n=001
  4. rar a temp.rar %%i
  5. for %%i in (temp.rar) do (
  6. if %%~zi leq 20971520 (copy temp.rar !n!.rar) else (del temp.rar
  7. n=n+1
  8. ))
  9. pause
复制代码
rar 为你电脑RAR绝对路径

TOP

回复 32# xczxczxcz

一个一个包压缩效率太低,打包405个文件用了一个小时。能否改成在门限下的尺寸,得到一个输出列表。
然后通过列表文件进行打包。

TOP

回复 34# netdzb

偶测试了 1080个文件(主目录540个,子目录也540个,每个文件为1.89M),按每个压缩包不大于20M的最大文件,默认压缩率,处理用时 147秒。又测试按每个压缩包 100个文件的方式打包,采用极限压缩。用时48秒。不知道你的 1 个小时怎么来的。

TOP

回复 35# xczxczxcz

可能我是机械硬盘的关系,或者我的cpu太慢。

TOP

返回列表