229989799 发表于 2022-12-22 20:36:59

【已解决】请问路径含通配符怎么判断文件是否存在??

本帖最后由 229989799 于 2022-12-23 14:05 编辑

举个栗子:
例如某软件路径是;***星号部分是存在不同版本,需要运行它去卸载软件;
$aPath = "C:\Program Files (x86)\Kingsoft\WPS Office\*****\utility\uninst.exe"

FileExist($aPath) ;不支持星号路径。求助一下论坛的热心网友;先谢谢大家啦;

afan 发表于 2022-12-22 21:07:58

可以先 FileFindFirstFile('C:\Program Files (x86)\Kingsoft\WPS Office\*') ...

229989799 发表于 2022-12-22 23:20:37

不是很会用A版说的FileFindFirstFile函数;在目录下有多个文件夹,需判断哪个文件夹里面才有uninst.exe;然后run它。
举个路径栗子:
C:\Program Files (x86)\Kingsoft\WPS Office\11.8.2.11718\utility\uninst.exe
C:\Program Files (x86)\Kingsoft\WPS Office\11.8.2.11739\utility\uninst.exe
C:\Program Files (x86)\Kingsoft\WPS Office\***********\utility\uninst.exe

haijie1223 发表于 2022-12-23 08:33:15

按照a版的方法,遍历文件夹下面所有的文件,找到uninst.exe,然后运行。

afan 发表于 2022-12-23 11:54:19

#include <Array.au3>
Local $aFile = _FileFind('C:\Program Files (x86)\Kingsoft\WPS Office\*', '\utility\uninst.exe')
_ArrayDisplay($aFile)

Func _FileFind($sPath, $sFile)
        Local $hSearch = FileFindFirstFile($sPath)
        If $hSearch = -1 Then Return MsgBox(0, '', '错误: 没有匹配的文件/目录.')
        Local $aPath = StringRegExp($sPath, '^(.*)([^\\]*[\*\?][^\\]*)$', 1)
        If @error Then Return MsgBox(0, '', '搜索格式错误')
        If $aPath = '' Then $aPath = @ScriptDir & '\'
        Local $sFileName, $sList = ''
        While 1
                $sFileName = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If @extended And FileExists($aPath & $sFileName & $sFile) Then $sList &= $aPath & $sFileName & $sFile & @CRLF
        WEnd
        FileClose($hSearch)
        If $sList = '' Then Return MsgBox(0, '', '错误: 没有找到匹配的文件.')
        Return StringRegExp($sList, '\V+', 3)
EndFunc   ;==>_FileFind

229989799 发表于 2022-12-23 13:57:38

A版UDF比较实用。

自己摸索的差太远了。
#include <WinAPIShPath.au3>
$sPath = FileFindFirstFile("C:\Program Files (x86)\Kingsoft\WPS Office\*")
    While 1
      $aSearch = FileFindNextFile($sPath)
      If @error Then ExitLoop
                $result = "C:\Program Files (x86)\Kingsoft\WPS Office\"&$aSearch&"\utility\uninst.exe"
                If FileExists($result) then ConsoleWrite($result & @CRLF)
    WEnd
FileClose($sPath)

页: [1]
查看完整版本: 【已解决】请问路径含通配符怎么判断文件是否存在??