Jump to content

FileExists-like function that returns the actual path


Recommended Posts

Hi guys

I've been struggling with this for a bit now and I'm wondering if there is an easy way to do something like this : 

#cs
    _FileExists ("path with/without filename with wildcard support", $ReturnPath = True)
    Should return the actual path if the dir or file with wildcards exists as 
    an array (there could be more then one answer) or False in case it doesn't
    $Array[0] should contain the amout of results
#ce

$sFile      =   _FileExists (@ProgramFilesDir & "\Juniper Networks\Network Connect *\*Network*Connect*.exe")
If Not @error Then 
    Run ($sFile[1])
Else
    ; False was returned and @error was set
EndIf

Has anybody ever done anything like this without alot of programming?

My example could be used for like : MS office => @ProgramFilesDir & "\Microsoft Office*\office*\msaccess.exe"
to check how many versions of access are installed (there might be a easier way but i want to check via filepath shizzle)

Hope someone can help :)

Thx

Link to comment
Share on other sites

Please have a look at functions FileFindFirstFile and FileFindNextFile. They support wildcards.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Please have a look at functions FileFindFirstFile and FileFindNextFile. They support wildcards.

Hi water, I tried that just now but i keep getting -1 returned while i'm 100% sure the file exists : 

$file = StringLeft (@SystemDir, 2) & "\Program*Files*\Juniper*Networks\Network*Connect\*Network*Connect*.exe"
$test = FileFindFirstFile ($file)
If $test = -1 Then Return "Nothing here"

It's because that keeps failing that i'm looking for other options

Edited by colombeen
Link to comment
Share on other sites

Your problem is described in the help file:

"You can use only one wildcard in the filename part or in the extension part i.e. a*.b?."

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Now I tried it like this : 

$file = @ProgramFilesDir & "\Juniper Networks\Network Connect*\dsNetworkConnect.exe"

Same result

Actual file path : C:\Program Files (x86)\Juniper Networks\Network Connect 8.0\dsNetworkConnect.exe

ConsoleWrite ($file) is the exact same without " 8.0" but with *

unless the wildcard may only be used in the filename or ext... then FileFindFirstFile is not the function for me

Edited by colombeen
Link to comment
Share on other sites

Which version of Windows do you run? 32 or 64 bit?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

It seems that "FileFindFirstFile needs a full path and filename (which can include wildcards) to return a search handle for further exploitation" as described here:

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

So it seems you need to create a list of directories and then loop through the array to search for the needed file using wildcards.
To retrieve a list of directories using wildcards use something like this:

#include <File.au3>
Global $sfile = @ProgramFilesDir & "\Juniper Networks\"
$aDirs = _FileListToArray($sfile", "Network Connect*", $FLTA_FOLDERS)
_ArrayDisplay($aDirs)

or retrieve directory by directory using

#include <File.au3>
$hFile = FileFindFirstFile(@ProgramFilesDir & "\Juniper Networks\Network Connect*")
$sFile = FileFindNextFile($hFile)
ConsoleWrite($sFile & @CRLF)

But you have to check if the returned result is a directory or a file.

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

I prefer using the built-in UDF _FileListToArray! :)

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; List all the files and folders in the desktop directory using the default parameters.
    Local $aFileList = _FileListToArray(@DesktopDir, "*")
    If @error = 1 Then
        MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.")
        Exit
    EndIf
    If @error = 4 Then
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.")
        Exit
    EndIf
    ; Display the results returned by _FileListToArray.
    _ArrayDisplay($aFileList, "$aFileList")
EndFunc   ;==>Example

; Copied from help file :P

 

Edited by TheDcoder
link

EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time)

DcodingTheWeb Forum - Follow for updates and Join for discussion

Link to comment
Share on other sites

DC,
I'm not sure _FileListToArray suupports wildcards in the path. Did you test what the OP is looking for?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

  • Moderators

colombeen,

I would suggest using _FileListToArrayRec - that way you can get all copies of the file that exist on the specified path without worrying about wildcards in the path itself. Taking your examples in the OP, this should work:

#include <File.au3>
#include <Array.au3>

$aList = _FileListToArrayRec(@ProgramFilesDir & "\Juniper Networks", "*Network*Connect*.exe", $FLTAR_FILES, $FLTAR_RECUR, Default, $FLTAR_FULLPATH)
_ArrayDisplay($aList, "Juniper Networks", Default, 8)

$aList = _FileListToArrayRec(@ProgramFilesDir, "msaccess.exe", $FLTAR_FILES, $FLTAR_RECUR, Default, $FLTAR_FULLPATH)
_ArrayDisplay($aList, "Access", Default, 8)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...