中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩
作者:
标题: 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩 上一主题 | 下一主题
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『楼 主』:  如果1个文件夹里有*.txt或*.exe则把该文件夹压缩

我想实现这个功能:
如果1个文件夹里有*.txt或*.exe,则把该文件夹压缩为.rar文件,压缩完后并把这个原文件夹删除,这个功能应该如何实现啊?

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

这个有办法做吗?

2007-1-17 04:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 tuesposo 分数: +2  时间:2007-1-17 05:50




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-17 04:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

dir/s *.exe *.txt>nul 2>nul&&rar ......

2007-1-18 23:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『第 4 楼』:  

你的不行啊

2007-1-19 00:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  

不会自己加上路径么?

dir/s c:\temp\str *exe *.txt>nul 2>nul&&rar a /r /df demo c:\temp\str

2007-1-19 00:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『第 6 楼』:  

还是不行,不是路径的问题,好象对这个文件夹也是一个变量的问题

2007-1-19 02:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

你得用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 ]

2007-1-19 02:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 8 楼』:  

在一级目录命令窗口输入
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 ]

2007-1-19 02:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『第 9 楼』:  

看不懂脑子混了

2007-1-19 03:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『第 10 楼』:  

谁好帮我完整写出来啊,我是新手不懂啊

2007-1-19 03:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  

命令行:
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

2007-1-19 03:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tuesposo
初级用户





积分 68
发帖 28
注册 2006-12-29
状态 离线
『第 12 楼』:  

找不到文件

2007-1-19 03:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 13 楼』:  


@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


2007-1-19 05:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: