elexy 发表于 2010-7-7 19:39:32

[已解决]请教函数 RUN 不能运行通配符的解决方案

本帖最后由 elexy 于 2010-7-7 20:14 编辑

请教各位老师,脚本目录下有一个 MP两个字母开头,后面部分随机的.EXE文件
举例 mp1234.exempadh.exe   mp32515bnuh.exe

我试了一下,RUN("mp*.exe")是不行的,查询资料得知RUN不支持通配符,能不能用正则表达式解决这个问题? 求代码参考,谢谢!

afan 发表于 2010-7-7 20:06:16

;#include <Array.au3>
#include <File.au3>
$a = _FileListToArray(@ScriptDir, 'mp*.exe', 1)
;_ArrayDisplay($a, '')
If $a <> 0 Then MsgBox(0, 0, 'Run("' & $a & '")')

afan 发表于 2010-7-7 20:12:27

如果不想包含头文件,也可以如下:$search = FileFindFirstFile('mp*.exe')
If $search = -1 Then Exit MsgBox(48, 0, '未搜索到')
$file = FileFindNextFile($search)
FileClose($search)
MsgBox(0, 0, 'Run("' & $file & '")')

elexy 发表于 2010-7-7 20:14:14

本帖最后由 elexy 于 2010-7-7 20:16 编辑

感谢超版 教科书式的精简解决方案。。。受教了! 我也觉得AU3能不包头尽量不包头

afan 发表于 2010-7-7 20:26:09

本帖最后由 afan 于 2010-7-7 21:05 编辑

回复 4# elexy


    呵呵,还有一点未说明,这两种方法都有个弊端,不能精确匹配 “mp*.exe”,也就是说如果文件名为“m   . . .p11.exe”之类的,在mp之间含有空格或点同样会被匹配(当然,如果有符合条件的且中间没有空格或点的会优先匹配),如果有比较严格的要求,那就最好再加上你在1#提出的正则匹配了~$search = FileFindFirstFile('mp*.exe')
If $search = -1 Then Exit MsgBox(48, 0, '未搜索到')
While 1
        $file = FileFindNextFile($search)
        If @Error Then Exitloop
        If StringRegExp($file, '^mp.*\.exe$') Then
                MsgBox(0, 0, 'Run("' & $file & '")')
                Exitloop
        Endif
WEnd
FileClose($search)

masterpcc 发表于 2010-7-7 20:38:14

受教了!!谢谢!!
页: [1]
查看完整版本: [已解决]请教函数 RUN 不能运行通配符的解决方案