colombeen

FileExists-like function that returns the actual path

14 posts in this topic

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

Share this post


Link to post
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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

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

Share this post


Link to post
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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

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

Share this post


Link to post
Share on other sites

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


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

64 bit OS. I double checked everything on filepath... not working

running in 32 bit mode autoit script => @ProgramFilesDir => C:\Program Files (x86)

Edited by colombeen

Share this post


Link to post
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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

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

AutoIt.4.Life Clubrooms - Life is like a Donut (secret key)

Spoiler

My contributions to the AutoIt Community

Some messages & Apologizes:

If I hurt you, Please accept my apologies, I never (regardless of the situation) mean to hurt anybody!!!

Also, I am very busy with my project so I will appear in the last row of the online list, if you want to contact me: Email@TheDcoder.xyz

Or you can have a nice chat with me in freenode, I use the same nick on freenode too!

3fHNZJ.gif

PLEASE JOIN ##AutoIt AND HELP THE IRC AUTOIT COMMUNITY!

Share this post


Link to post
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 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

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


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______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

 

Share this post


Link to post
Share on other sites

_FileListToArrayRec() and then loop through the results with StringinStr or RegEx to simulate the Wildcards if you need more control over what to display.

Share this post


Link to post
Share on other sites

Ok thx for the info guys. I'll try this out and post my final code when i'm done :)

Share this post


Link to post
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