找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 129127|回复: 35

[文件操作] BAT如何批量压缩文件夹的文件包括子目录下的文件?

[复制链接]
发表于 2019-6-17 11:20:48 | 显示全部楼层 |阅读模式
把文件压缩到一个到临时一个文件,当临时文件体积大于20mb的时候,
要求删除要求删除压缩包里面最后一个文件,使其体积不大于20mb,
然后保存到001.zip或001.rar。然后把临时压缩包体积重置0,继续打包
后面的文件,当体积大于20mb的时候,也删掉临时压缩包的最后一个文件。
然后把临时文件改为002.zip或rar。不知道表达的清楚吗?
发表于 2019-6-17 11:36:38 | 显示全部楼层
7-Zip或者WinRAR自带的【分卷压缩】功能无法满足需求是吗?
 楼主| 发表于 2019-6-17 11:54:50 | 显示全部楼层
本帖最后由 netdzb 于 2019-6-17 11:56 编辑

回复 2# Batcher

分卷压缩是不能单独解压,要求能够单独解压。

代码我能写一点,
就是打包的时候,绝对路径怎么写,我不知道怎么写?
发表于 2019-6-17 12:39:00 | 显示全部楼层
回复 3# netdzb


    把你写的代码发出来,我看看怎么加上路径。
 楼主| 发表于 2019-6-17 12:49:06 | 显示全部楼层
本帖最后由 netdzb 于 2019-6-17 12:50 编辑

回复 4# Batcher


@echo on
setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /a-d /b *.*') do (
set n=001
     rar a temp.rar %%i
     if temp.rar的大小,小于等于20mb
        copy temp.rar !n!.rar
     else
       (
        del temp.rar
        n=n+1
       )
  )

temp.rar的大小用什么变量表示,写了一部分,帮忙修改一下,谢谢。
发表于 2019-6-17 13:17:29 | 显示全部楼层
回复 5# netdzb


    temp.rar的大小你试试 %%~zi
 楼主| 发表于 2019-6-17 14:04:11 | 显示全部楼层
回复 6# Batcher

temp.rar是常量, %%~zi是变量,

如何判断temp.rar小于20MB的代码呢?常量的写法我不会啊。
发表于 2019-6-17 15:04:51 | 显示全部楼层
确保你的系统能正常使用 POWERSHELL ,否则PASS, 下面的脚本用 WINRAR 安装目录下的 RAR.EXE 非 WINRAR.EXE。偶已集成 RAR.EXE 到系统环境变量中,所以直接使用。至于 winrar.exe 和 rar.exe 是否有相同的用法和效果。未知。

确保 使用工作路径 切换到 你要操作的文件夹。

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

  2. $Begin, $n =0,1;
  3. While ( $Begin -lt $files.Count )
  4. {
  5.         $name =$n.ToString().PadLeft(3,'0')+'.rar';
  6.         & rar a -ep $name $files[$Begin].FullName|Out-Null;
  7.         if ((Get-Item $name).Length/1MB -gt 20) {
  8.                 & rar d -ep $name $files[$Begin].Name|Out-Null;
  9.                 $n++;
  10.         } else { $Begin++ }
  11. }
复制代码
 楼主| 发表于 2019-6-17 15:34:05 | 显示全部楼层
回复 8# xczxczxcz

我装的是powershell V2版本,代码无法通过。
发表于 2019-6-17 15:37:10 | 显示全部楼层
回复 9# netdzb


哪一句? 偶测了下,一路OK。
 楼主| 发表于 2019-6-17 16:46:33 | 显示全部楼层
回复 10# xczxczxcz

powershell -file 脚本.ps1
是这样运行吗?

刚弄了个Hello,World可以运行,

Write-Host "Hello World!"
Write-Host "lk"

把上面保存到脚本里面,powershell -file 脚本.ps1还是报错,不知道哪里不对?
 楼主| 发表于 2019-6-17 16:50:44 | 显示全部楼层
回复 10# xczxczxcz

哪里有好用的powershell,手上的版本好像被微软禁用了。
 楼主| 发表于 2019-6-17 16:53:44 | 显示全部楼层
回复 8# xczxczxcz

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>d:

D:\>cd \power

D:\power>powershell hello.ps1
The term 'hello.ps1' is not recognized as a cmdlet, function, operable program,
or script file. Verify the term and try again.
At line:1 char:10
+ hello.ps1 <<<<

D:\power>

我报上面的错误。
发表于 2019-6-17 16:57:34 | 显示全部楼层
回复 12# netdzb

管理员运行 POWERSHELL 命令行窗口。
输入: set-executionpolicy RemoteSigned
回车,再输入 'A' 再回车。

输入: CD "你的文件夹目录完整路径" 回车。
粘贴上面的脚本内容,回车,会在目录下生成 001.ra;002.rar;....

如果你的 RAR 不能随意调用。则要把上面脚本中的 rar 写上完整路径。如: "C:\XXXX\XXX\WINRAR\RAR.EXE"

不需要 BAT 调用.
发表于 2019-6-17 16:58:42 | 显示全部楼层
回复 13# netdzb


    是 POWERSHELL 窗口  不是DOS 窗口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:16 , Processed in 0.020604 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表