Board logo

标题: 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩 [打印本页]

作者: tuesposo     时间: 2007-1-17 04:07    标题: 如果1个文件夹里有*.txt或*.exe则把该文件夹压缩

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

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

这个有办法做吗?
作者: redtek     时间: 2007-1-17 04:39
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 ]
作者: zh159     时间: 2007-1-18 23:44
dir/s *.exe *.txt>nul 2>nul&&rar ......
作者: tuesposo     时间: 2007-1-19 00:01
你的不行啊
作者: zh159     时间: 2007-1-19 00:17
不会自己加上路径么?

dir/s c:\temp\str *exe *.txt>nul 2>nul&&rar a /r /df demo c:\temp\str
作者: tuesposo     时间: 2007-1-19 02:25
还是不行,不是路径的问题,好象对这个文件夹也是一个变量的问题
作者: zh159     时间: 2007-1-19 02:35
你得用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 ]
作者: zerocq     时间: 2007-1-19 02:51
在一级目录命令窗口输入
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 ]
作者: tuesposo     时间: 2007-1-19 03:04
看不懂脑子混了
作者: tuesposo     时间: 2007-1-19 03:13
谁好帮我完整写出来啊,我是新手不懂啊
作者: zh159     时间: 2007-1-19 03:28
命令行:
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
作者: tuesposo     时间: 2007-1-19 03:43
找不到文件
作者: everest79     时间: 2007-1-19 05:36

@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