複選檔案然後合併求語法(已解决)
本帖最后由 CCM 于 2011-4-13 22:04 编辑大家好
目前工作上遇到一个情况,就是客户使用outlook express(OE)来发信如果附件超过3MB时,邮件会自动分割(这无法请客户取消),因此收到的邮件会是1/3、2/3、3/3...等等
由于公司用OUTLOOK收信,因此无法用OE还原。所以我是把附件全部存到C:\,然后用DOS命令来合并
copy a.dat + b.dat + n.dat > final.eml 再使用OE开启EML檔
接触了AU3之后,想说能否做个简单的工具,让我可以选取DAT,然后再合并。我自己想到的作法如下,不过ELSE之后我就不知道该怎么写了,请各位有经验的前辈指导一下。
唯一想到的是复选文件,是否该用数组?
$A="请选取要合并的档案,可用Ctrl或Shift复选"
$var = FileOpenDialog($A, @WorkingDir & "", "DAT(*.*)", 1 + 4 )
If @error Then
MsgBox(0,"DAT to EML Tool","无选取档案")
Else
EndIf
本帖最后由 afan 于 2011-4-13 17:06 编辑
Local $Files = FileOpenDialog('请选取要合并的档案,可用Ctrl或Shift复选', @WorkingDir & '', 'DAT(*.*)', 1 + 4)
If @error Then Exit (MsgBox(0, 'DAT to EML Tool', '无选取档案,退出'))
If Not StringInStr($Files, '|') Then Exit (MsgBox(0, 'DAT to EML Tool', '单个文件无合并意义,退出'))
Local $sR = StringRegExp($Files, '[^\|]+', 3)
If @error Or UBound($sR) < 2 Then Exit -1
Local $FileDir = $sR & '\'
Local $cmdstr = @ComSpec & ' /c Copy "'
For $i = 1 To UBound($sR) - 1
$cmdstr &= $FileDir & $sR[$i] & '" + "'
Next
$cmdstr = StringTrimRight($cmdstr, 3) & ' final.eml'
RunWait($cmdstr, '', 0) 如果分卷太多,其实可以设计成只选择第一个,程序根据命名规则自动寻找后面所有的分卷再合并到第一个。 谢谢AFAN,刚刚测试了一下,选取后合并出来的EML档,无法用OE开启,用笔记本开启后,内容是刚刚选取的文件名称,所以程序没有做copy a+b+c的动作,请问AFAN能否再帮忙想想。
个人想了下
是否使用数组,但这会不会因为选取档案的顺序影响合并内容,因为关系到变量部分个人不是很上手,所以请大家提供方法,我再调整作法,谢谢。 我搜索并修改下列程序,虽然能读取文件名,不过档案合并那边没作用,麻烦请帮忙修正一下,谢谢。
#include <Array.au3>
dim $search = FileFindFirstFile("*.dat")
If $search = -1 Then
MsgBox(0, "錯誤!", "沒有DAT檔,請確認檔案存放位置!")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
run(@comspec & "/c" & "copy" & $file & "+" & " > Final.eml")
msgbox(0,"",$file)
WEnd
FileClose($search)
本帖最后由 afan 于 2011-4-13 17:07 编辑
回复 4# CCM
那个合并完全是用的你的“copy a.dat + b.dat + n.dat > final.eml ”我只是将其中的文件换成了选择的文件。 按说 final.eml 应该也只是个合并文件的记录。如果没有“>”,final.eml 才是最终的合并文件。
2#的代码我修改了下,去掉了那个“>”,你再试试~ 很抱歉,去掉">" 就行了,谢谢AFAN的帮忙。
页:
[1]