标题: 怎样把多个文件(文件名不确定)按一定规律分别压缩
[打印本页]
作者: toy
时间: 2007-7-1 17:24
标题: 怎样把多个文件(文件名不确定)按一定规律分别压缩
每次别的程序会拷多个文件到一个目录下(即每次每个文件的文件名并不同),我想编批处理把拷到该目录的文件夹按规律分别压缩起来。比如说现在拷入该目录下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两个压缩包
但下次拷入的文件名会不同,事先并不能确定拷入文件的文件名,那我该怎么办呢?
作者: lxmxn
时间: 2007-7-1 19:57
你要根据什么条件来压缩呢?
作者: toy
时间: 2007-7-1 20:24
文件不是特别有规律,比如说有下面五个文件
answer1.txt
附件_answer1.jpg
answer2.txt
附件_answer2.jpg
answer3.txt
1和2个文件压缩在一起
3和4个文件压缩在一起
第5个文件单独压缩在一起
作者: lxmxn
时间: 2007-7-1 20:31
这样成吗?
rar a answer1 *answer1*
rar a answer2 *answer2*
rar a answer3 *answer3*
作者: toy
时间: 2007-7-1 21:20
对不起,我讲得不清楚,那个answer后面的数字是变化的,并不是固定的1 2 3, 每次递增,但每次文件的数量不同,因此并不预知answer后的数字是多少。
但"answer*.txt"有时会带一个“附件_answer*.jpg",我想把后接相同数字的两个文字压缩在一起
作者: toy
时间: 2007-7-2 12:59
我觉得这里面涉及到一个怎样把文件名读出并赋予一个变量的问题,比如这次生成的两个有联系的文件名是
answer225.txt
附件_answer225.txt
关键是怎样知道answer后的数字是多少(数字是变化的),同时把这个数字赋予给一个变量(如%a%),以方便rar来调用
作者: lotus516
时间: 2007-7-2 13:07
有附件的话是不是附件一定是以“附件_*”这样的形式呢?
作者: toy
时间: 2007-7-2 23:29
是的,”附件“在最前面固定的,变化的仅仅是数字
作者: Climbing
时间: 2007-7-3 11:37
问题的关键就是将同一类型的文件的基本名,也就是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
需要楼主再根据实现情况完善。
作者: toy
时间: 2007-7-3 21:58
能麻烦解释一下吗,我对for语句并不是特别熟
“ do call :_rar %%~ni”是怎么和下面的压缩联系起来的?
作者: Climbing
时间: 2007-7-4 08:32
:_rar相当于一个子函数,它根据传递过来的参数(%1)实现对特定的文件进行压缩操作,而for命令的作用就是调用这个子函数,每次传递一个特定的参数,而这个特定参数就是前面提到的一组文件的基本名,例如answer225。%%~ni就代表这个基本名。
作者: toy
时间: 2007-7-5 23:54
标题: 搞定了,谢谢,想再问climbing一个问题
谢谢,想再问一个问题:有下面多个文件,文件名中的数字变化且长度不定,我怎样能把这些数字分别提取出来并赋给一个变量,以方便别的命令调用呢?
answer1号.txt
answer33号.txt
answer338号.txt
作者: Climbing
时间: 2007-7-6 09:27
你学一下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
作者: toy
时间: 2007-7-7 11:27
标题: 谢谢
谢谢,会用了,不过在windows里关于set的帮助里好象看不到你的这种用法啊
作者: Climbing
时间: 2007-7-9 11:39
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.