中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-03 04:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩 查看 1,138 回复 12
楼 主 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩 发表于 2007-01-17 04:07 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
我想实现这个功能:
如果1个文件夹里有*.txt或*.exe,则把该文件夹压缩为.rar文件,压缩完后并把这个原文件夹删除,这个功能应该如何实现啊?

注:不包含子文件夹,如一级文件夹--二级文件夹--三级文件夹---5.txt
则把三级文件夹压缩为三级文件夹.rar,压缩完后并把原三级文件夹删除.
一级文件夹和二级文件夹不用动.

这个有办法做吗?
2 发表于 2007-01-17 04:39 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
RAR的 /DF 参数(生成压缩档案后删除文件)就支持压缩完目标文件或文件夹以后将其删掉。

所以,压缩以后的删除目录的工作不用交给DOS命令去做,让rar去做就行了,/DF参数支持。




RAR的 /R 参数支持压缩指定目录以内这个目录内所有子目录。



假如我要压缩 “C:\TEMP\STR” 这个目录以及它下面的所有子目录。

C:\TEMP\STR 目录结构如下:

C:\TEMP
├─str
│ └─Demo



使用 rar.exe 操作过程:


C:\>rar a /r /df demo c:\temp\str

RAR 3.00 版权 (c) 1993-2002 为 Eugene Roshal 所有 14 May 2002
共享软件版本 键入 RAR -? 可获得帮助

评估版,请注册。

正在创建 压缩档案 demo.rar

正在添加 c:\temp\str 搞定
正在添加 c:\temp\str\a.txt 搞定
正在添加 c:\temp\str\Demo 搞定
正在添加 c:\temp\str\Demo\a.txt 搞定
正在添加 c:\temp\str\Demo\read.txt 搞定
正在添加 c:\temp\str\Demo\run.bat 搞定
正在添加 c:\temp\str\Demo\s.bat 搞定
正在添加 c:\temp\str\read.txt 搞定
正在添加 c:\temp\str\run.bat 搞定
正在添加 c:\temp\str\s.bat 搞定
正在删除 c:\temp\str\s.bat 已经删除
正在删除 c:\temp\str\run.bat 已经删除
正在删除 c:\temp\str\read.txt 已经删除
正在删除 c:\temp\str\Demo\s.bat 已经删除
正在删除 c:\temp\str\Demo\run.bat 已经删除
正在删除 c:\temp\str\Demo\read.txt 已经删除
正在删除 c:\temp\str\Demo\a.txt 已经删除
正在删除目录 c:\temp\str\Demo
正在删除 c:\temp\str\a.txt 已经删除
正在删除目录 c:\temp\str
完成




当执行完以后,C:\TEMP\STR 目录被压缩以后,由RAR自动将其删掉了。


如果你只希望压缩当前指定的目录文件夹,而不希望压缩目录文件夹内的子目录,则rar压缩时无需加 /r 参数即可。


更详细的 rar 命令行操作详见它的帮助信息: RAR /?


(另: rar.exe 在 WinRAR 目录中,系统没有给它设置路径。所以要在任何地方运行它请为其所在目录设置路径,或将 rar.exe 拷贝到 Windows 目录下就可以不用设置路径了)

(注:上面只是可行操作原理。关于具体的实际代码兄可以继续研究~:)

[ Last edited by redtek on 2007-1-16 at 03:43 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
tuesposo +2 2007-01-17 05:50
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
3 发表于 2007-01-18 23:44 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
dir/s *.exe *.txt>nul 2>nul&&rar ......
4 发表于 2007-01-19 00:01 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
你的不行啊
5 发表于 2007-01-19 00:17 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
不会自己加上路径么?

dir/s c:\temp\str *exe *.txt>nul 2>nul&&rar a /r /df demo c:\temp\str
6 发表于 2007-01-19 02:25 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
还是不行,不是路径的问题,好象对这个文件夹也是一个变量的问题
7 发表于 2007-01-19 02:35 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
你得用for将各个文件夹单独一个个列出来(完整路径)再
获取子目录路径:dir/s/ad/b 路径

dir “%路径%” *exe *.txt>nul 2>nul&&rar a /r /df demo “%路径%”

[ Last edited by zh159 on 2007-1-18 at 01:39 PM ]
8 发表于 2007-01-19 02:51 ·  中国 浙江 温州 电信
中级用户
★★
积分 458
发帖 196
注册 2006-10-05 12:04
19年会员
UID 64614
状态 离线
在一级目录命令窗口输入
for /f "delims=的" %a in ('dir /a/s *.txt^|find ":\"') do @echo %a
把含有txt文件的子目录全设成变量然后rar

[ Last edited by zerocq on 2007-1-19 at 02:52 AM ]
9 发表于 2007-01-19 03:04 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
看不懂脑子混了
10 发表于 2007-01-19 03:13 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
谁好帮我完整写出来啊,我是新手不懂啊
11 发表于 2007-01-19 03:28 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
命令行:
for /f "delims=的" %a in ('dir /a/s *.txt *.exe^|find ":\"') do rar a /r /df demo %a

批处理:
for /f "delims=的" %%a in ('dir /a/s *.txt *.exe^|find ":\"') do rar a /r /df demo %%a
12 发表于 2007-01-19 03:43 ·  中国 上海 上海乾万网络(QianWan_Network)有限公司(电信出口)
初级用户
积分 68
发帖 28
注册 2006-12-29 00:55
19年会员
UID 74861
性别 男
状态 离线
找不到文件
13 发表于 2007-01-19 05:36 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线

@echo off
(for /f "tokens=2*" %%i in ('reg query "HKCR\.rar\shellnew" /v filename^|find "rarnew.dat"') do set rar="%%~dpjrar.exe")2>nul||goto end
for /r F: %%i in (.) do pushd "%%~fi"&dir *.exe;*.txt>nul 2>nul&&echo rar a /r /df "%%~dpi%%~ni.rar" "%%~fi"
pause
论坛跳转: