[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
确保你的系统能正常使用 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. }
复制代码

TOP

回复 9# netdzb


哪一句? 偶测了下,一路OK。

TOP

回复 12# netdzb

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

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

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

不需要 BAT 调用.

TOP

回复 13# netdzb


    是 POWERSHELL 窗口  不是DOS 窗口

TOP

回复  xczxczxcz

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

...
netdzb 发表于 2019-6-17 16:53



    holleo.ps1 前面加个 ".\"; powershell .\hello.ps1; 介样子。或 powershell "d:\xxx\hello.ps1"

TOP

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

把 XXX.PS1 放到你要处理的文件夹内。再把控制台切换到该目录。再运行。
偶看你自己写的BAT 也是在待处理文件夹内,所以也这样写了。

不过这样的话会把 xxx.ps1也打包进去。

其实你 在切换到该目录下后,直接把上面的 脚本内容 复制粘贴 到控制台运行 就可以了。

TOP

回复 19# netdzb


    偶看你上面的 BAT 只处理 文件 没有处理文件夹。所以你懂的。过滤了文件夹。

TOP

回复 22# netdzb

把  PS 脚本的第一行改成 $files =ls -rec|?{$_.Directory};
其它不变,看能不能满足你的要求。如果要保存原来文件的目录结构,自行删除 -EP 参数。

TOP

回复 24# netdzb


    是把文件夹内的文件一起提出来了,不建立文件夹。

TOP

你自己根据需要 修改 RAR 参数吧。偶们也不明白你的最终需求。

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

回复 34# netdzb

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

TOP

返回列表