中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样把多个文件(文件名不确定)按一定规律分别压缩
作者:
标题: 怎样把多个文件(文件名不确定)按一定规律分别压缩 上一主题 | 下一主题
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『楼 主』:  怎样把多个文件(文件名不确定)按一定规律分别压缩

每次别的程序会拷多个文件到一个目录下(即每次每个文件的文件名并不同),我想编批处理把拷到该目录的文件夹按规律分别压缩起来。比如说现在拷入该目录下3个文件,文件名分别是1.txt   1-1.txt   2.txt,我用
rar a file1 1.txt 1-1.txt
rar a file2 2.txt
把三个文件分别压缩成fil1.rar和file2.rar两个压缩包

但下次拷入的文件名会不同,事先并不能确定拷入文件的文件名,那我该怎么办呢?

2007-7-1 17:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

你要根据什么条件来压缩呢?

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





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 3 楼』:  

文件不是特别有规律,比如说有下面五个文件
answer1.txt
附件_answer1.jpg
answer2.txt
附件_answer2.jpg
answer3.txt

1和2个文件压缩在一起
3和4个文件压缩在一起
第5个文件单独压缩在一起

2007-7-1 20:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

这样成吗?
rar a answer1 *answer1*
rar a answer2 *answer2*
rar a answer3 *answer3*

2007-7-1 20:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 5 楼』:  

对不起,我讲得不清楚,那个answer后面的数字是变化的,并不是固定的1 2 3, 每次递增,但每次文件的数量不同,因此并不预知answer后的数字是多少。
但"answer*.txt"有时会带一个“附件_answer*.jpg",我想把后接相同数字的两个文字压缩在一起

2007-7-1 21:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 6 楼』:  

我觉得这里面涉及到一个怎样把文件名读出并赋予一个变量的问题,比如这次生成的两个有联系的文件名是

answer225.txt
附件_answer225.txt

关键是怎样知道answer后的数字是多少(数字是变化的),同时把这个数字赋予给一个变量(如%a%),以方便rar来调用

2007-7-2 12:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lotus516
高级用户

论坛上抢劫的


积分 551
发帖 246
注册 2006-9-21
状态 离线
『第 7 楼』:  

有附件的话是不是附件一定是以“附件_*”这样的形式呢?

2007-7-2 13:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 8 楼』:  

是的,”附件“在最前面固定的,变化的仅仅是数字

2007-7-2 23:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 9 楼』:  

问题的关键就是将同一类型的文件的基本名,也就是answer???取出来并作为参数传递给rar命令。

如果文件名前面的answer字符串是固定的话,这事儿就好办了。

用for命令可以取出具有共同特征的基本文件名,然后再将这个基本文件名传递给一个子函数作为参数来实现压缩。

大致应该是下面这个样子:
@echo off
for /f %%i in ('dir /b answer*.txt') do call :_rar %%~ni
goto :eof

:_rar
rar -a %1 *%1.*
goto :eof
需要楼主再根据实现情况完善。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-7-3 11:37
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 10 楼』:  

能麻烦解释一下吗,我对for语句并不是特别熟
“ do call :_rar %%~ni”是怎么和下面的压缩联系起来的?

2007-7-3 21:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 11 楼』:  

:_rar相当于一个子函数,它根据传递过来的参数(%1)实现对特定的文件进行压缩操作,而for命令的作用就是调用这个子函数,每次传递一个特定的参数,而这个特定参数就是前面提到的一组文件的基本名,例如answer225。%%~ni就代表这个基本名。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-7-4 08:32
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 12 楼』:  搞定了,谢谢,想再问climbing一个问题

谢谢,想再问一个问题:有下面多个文件,文件名中的数字变化且长度不定,我怎样能把这些数字分别提取出来并赋给一个变量,以方便别的命令调用呢?

answer1号.txt
answer33号.txt
answer338号.txt

2007-7-5 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 13 楼』:  

你学一下set的字符串替换用法就行了。

set a=answer1号.txt
set a=%a:answer=%
set a=%a:号.txt=%
echo %a%

Result:
F:\WORK\DOS>set a=answer1号.txt

F:\WORK\DOS>set a=%a:answer=%

F:\WORK\DOS>set a=%a:号.txt=%

F:\WORK\DOS>echo %a%
1



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-7-6 09:27
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
toy
初级用户





积分 32
发帖 13
注册 2006-3-27
状态 离线
『第 14 楼』:  谢谢

谢谢,会用了,不过在windows里关于set的帮助里好象看不到你的这种用法啊

2007-7-7 11:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 15 楼』:  

Environment variable substitution has been enhanced as follows:

    %PATH:str1=str2%

would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2".  "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output.  "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-7-9 11:39
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复

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


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



论坛跳转: