orbs 201 Posted January 30, 2011 hello everyone, suppose i have a given filename (e.g. "letter.doc"), and a given mask (e.g. "*.doc"). i want to check if the filename fits the mask. i started to work on a script that splits the filename using the known part of the mask as delimiter, and matches the split parts with the * and ? in the mask. in this example, the delimiter is ".doc", the split part of the filename is "letter" and the split part of the mask is "*", so i can match. but this is getting too complicated for more complex masks. is there a simple way to do it? thanks in advance, Or Share this post Link to post Share on other sites
guinness 1,518 Posted January 30, 2011 (edited) Have a look at Edited January 30, 2011 by guinness UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Share this post Link to post Share on other sites
BrewManNH 1,305 Posted January 30, 2011 You could also look at the _PathSplit command, it will split a file name into its component parts such as Drive letter, path, file name, and file extension. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way!I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Share this post Link to post Share on other sites
UEZ 1,273 Posted January 30, 2011 Best is probably _PathSplit() and StringRegExp() in combination. Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Share this post Link to post Share on other sites
Malkey 231 Posted January 30, 2011 This function appears to work.It converts a wildcard mask into a regular expression pattern.ConsoleWrite(_CheckFilenameFitsMask("letter.doc", "*.doc") & @CRLF) ; Description - Checks if a file name, $sFileName, fits a wildcard mask, $sMask, with optional case-insensitivity. ; $sMask - A pattern string can be a combination of valid file name characters and wildcard characters. ; $CaseSensitive - Case sensitivity default = 1 meaning "function is case sensitive". ; Returns 1 (matched) or 0 (no match). ; Func _CheckFilenameFitsMask($sFileName, $sMask = "*", $CaseSensitive = 1) $sMask = StringRegExpReplace($sMask, "([\.\\])", "\\\1") $sMask = StringReplace($sMask, "?", ".") $sMask = StringReplace($sMask, "*", ".*") If $CaseSensitive <> 1 Then $sMask = "(?i)" & $sMask ;ConsoleWrite($sMask & @CRLF) Return StringRegExp($sFileName, $sMask) EndFunc ;==>_CheckFilenameFitsMask Share this post Link to post Share on other sites
Varian 8 Posted January 31, 2011 (edited) $FileMask = '*.doc' $FileName = 'Letter.doc' $Extension = StringRegExpReplace($FileName, '^.+\.', '') If StringInStr($FileMask, $Extension) Then MsgBox(262208, 'Success', $FileName & ' fits File Mask ' & $FileMask) Edited January 31, 2011 by Varian Share this post Link to post Share on other sites
Ascend4nt 131 Posted January 31, 2011 Had this lying around expandcollapse popup#include-once ; =============================================================================================================================== ; <_FileWildcardPathMatch.au3> ; ; Function to test a string against another string containing DOS-style wildcards (*,?). ; NOTE: Some users have reported that it doesn't function *exactly* like the DOS variant, which is okay ; if you know this ahead of time (see Sources, and experiment). ; ; Function: ; _FileWildcardPathMatch() ; Tests 1st string against wildcard pattern of 2nd string ; ; Sources: ; 'PathMatchSpec' on MSDN @ http://msdn.microsoft.com/en-us/library/bb773727%28v=VS.85%29.aspx ; ; Author: Ascend4nt ; =============================================================================================================================== ; =================================================================================================================== ; -------------------- MAIN FUNCTION -------------------- ; =================================================================================================================== ; =================================================================================================================== ; Func _FileWildcardPathMatch($sPath,$sWildcard) ; ; Function to test a string against another string containing DOS-style wildcards (*,?). ; NOTE: Some users have reported that it doesn't function *exactly* like the DOS variant, which is okay ; if you know this ahead of time (see Sources in header, and experiment!). ; ; $sPath = Path or pretty much any string that you will be testing with a wildcard string ; $sWildcard = String to test $sPath against. Obviously this would be the string containing wildcards (*,?) ; ; Return: ; Success: 0 (no match) or 1 (match), with @error=0 ; Failure: 0 with @error set: ; @error = 2 = DLLCall() error. @extended = actual DLLCall error code ; ; Author: Ascend4nt ; =================================================================================================================== Func _FileWildcardPathMatch($sPath,$sWildcard) Local $aRet=DllCall("shlwapi.dll","bool","PathMatchSpecW","wstr",$sPath,"wstr",$sWildcard) If @error Then Return SetError(2,@error,False) Return $aRet[0] EndFunc ;~ #cs ;~ $sFolderOrFile="mdo.tcs.txt" ;~ $sWildcard="m?o*" ;~ $sFolderOrFile="C:\folder.txt" ;~ $sWildcard="C:\folder.t*xt" $sFolderOrFile="googly.tenat" $sWildcard="G*y.t*t" ConsoleWrite("Match results:"&_FileWildcardPathMatch($sFolderOrFile,$sWildcard)&", @error="&@error&", @extended="&@extended&@CRLF) My contributions:Performance Counters in Windows - Measure CPU, Disk, Network etc Performance | Network Interface Info, Statistics, and Traffic | CPU Multi-Processor Usage w/o Performance Counters | Disk and Device Read/Write Statistics | Atom Table Functions | Process, Thread, & DLL Functions UDFs | Process CPU Usage Trackers | PE File Overlay Extraction | A3X Script Extract | File + Process Imports/Exports Information | Windows Desktop Dimmer Shade | Spotlight + Focus GUI - Highlight and Dim for Eyestrain Relief | CrossHairs (FullScreen) | Rubber-Band Boxes using GUI's (_GUIBox) | GUI Fun! | IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) | Magnifier (Vista+) Functions UDF | _DLLStructDisplay (Debug!) | _EnumChildWindows (controls etc) | _FileFindEx | _ClipGetHTML | _ClipPutHTML + ClipPutHyperlink | _FileGetShortcutEx | _FilePropertiesDialog | I/O Port Functions | File(s) Drag & Drop | _RunWithReducedPrivileges | _ShellExecuteWithReducedPrivileges | _WinAPI_GetSystemInfo | dotNETGetVersions | Drive(s) Power Status | _WinGetDesktopHandle | _StringParseParameters | Screensaver, Sleep, Desktop Lock Disable | Full-Screen Crash RecoveryWrappers/Modifications of others' contributions:_DOSWildcardsToPCRegEx (original code: RobSaunder's) | WinGetAltTabWinList (original: Authenticity)UDF's added support/programming to:_ExplorerWinGetSelectedItems | MIDIEx UDF (original code: eynstyne)(All personal code/wrappers centrally located at Ascend4nt's AutoIT Code) Share this post Link to post Share on other sites