本帖最后由 supersp 于 2010-1-12 15:08 编辑
一位同事有大量PDF跟JPG文件,要按创建日期的顺序打印,而FileFindFirstFile() 好像不支持多个关键字,并且搜索顺序未知,因此调用CMD,写了下面的代码
在XP下正常运行,但2000下却提示子操作使用了非数组变量。
因为无法在同事的2000系统下调试,只能本机检查代码,发现可能是 StringRegExp() 返回的数组参数问题,问题代码如下。
有没有一种方法,得到按日期排序后的文件组,并且PDF跟JPG是夹杂的。
代码如下:#include <String.au3>
#include <Constants.au3>
;按日期排序文件并读入数组
Local $foo = Run(@ComSpec & ' /c dir /-c /o:d /t:c| findstr ".jpg .jpeg .pdf 个文件"', $dir, @SW_HIDE, $STDOUT_CHILD)
Global $cow
While 1
$line = StdoutRead($foo) ;读取CMD STDOUT
If @error Then ExitLoop
If $line <> "" Then
$cow = StringSplit($line, @CRLF, 1) ;按行分解到数组
EndIf
WEnd
;提取文件名,文件大小
Global $size
Global $sarry = StringRegExp($cow[$cow[0] - 1], '\h+\d+\h\S+\h+(\d+)\h\S+', 1, 1) ;正则提取所有文件总大小
Global $zsize = Number($sarry[0])
For $i = 1 To $cow[0] - 2 Step 1
$sarry = StringRegExp($cow[$i], '.{1,}\h{1,}(\d{1,})\h{1,}\S{1,}', 1, 1) ;正则提取文件大小
$size += Number($sarry[0])
$sarry = StringRegExp($cow[$i], '\h+\d+\h+(\S+)', 1, 1) ;正则提取文件名
$file = $sarry[0]
_printpdf($file, $i)
Next
|