doestergaard Posted March 9, 2014 Share Posted March 9, 2014 (edited) How do you retrieve the file name only? I have tried path split with various examples, but mine does stile output the files with .wim, which i don't want. ; Get wim files from image folder $WimDir = "Z:\images\*.wim" _GUICtrlComboBox_AddDir ( $sSelectOS, $WimDir ) _GUICtrlComboBox_SetCurSel ( $sSelectOS, 0 ) What do I need for using _PathSplit with my code? Thanks in advance! Edited March 9, 2014 by doestergaard Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 9, 2014 Moderators Share Posted March 9, 2014 doestergaard,Personally I use these SREs from Malkey: expandcollapse popupLocal $sFile = "C:\Program Files\Another Dir\AutoIt3\AutoIt3.chm" ; Drive letter - Example returns "C" Local $sDrive = StringRegExpReplace($sFile, ":.*$", "") ; Full Path with backslash - Example returns "C:\Program Files\Another Dir\AutoIt3\" Local $sPath = StringRegExpReplace($sFile, "(^.*\\)(.*)", "\1") ; Full Path without backslash - Example returns "C:\Program Files\Another Dir\AutoIt3" Local $sPathExBS = StringRegExpReplace($sFile, "(^.*)\\(.*)", "\1") ; Full Path w/o drive letter with backslash - Example returns "\Program Files\Another Dir\AutoIt3\" Local $sPathExDr = StringRegExpReplace($sFile, "(^.:)(\\.*\\)(.*$)", "\2") ; Path w/o drive letter w/o backslash - Example returns "Program Files\Another Dir\AutoIt3" Local $sPathExDrBS = StringRegExpReplace($sFile, "(^.:\\)(.*)(\\.*$)", "\2") ; File name with ext - Example returns "AutoIt3.chm" Local $sFileName = StringRegExpReplace($sFile, "^.*\\", "") ; File name w/o ext - Example returns "AutoIt3" Local $sFilenameExExt = StringRegExpReplace($sFile, "^.*\\|\..*$", "") ; Dot Ext - Example returns ".chm" Local $sDotExt = StringRegExpReplace($sFile, "^.*\.", ".$1") ; Ext - Example returns "chm" Local $sExt = StringRegExpReplace($sFile, "^.*\.", "") MsgBox(0, "Path File Name Parts", _ "Drive " & @TAB & $sDrive & @CRLF & _ "Path " & @TAB & $sPath & @CRLF & _ "Path w/o\ " & @TAB & $sPathExBS & @CRLF & _ "Path w/o Drv " & @TAB & $sPathExDr & @CRLF & _ "Path w/o Drv or \ " & @TAB & $sPathExDrBS & @CRLF & _ "File Name " & @TAB & $sFileName & @CRLF & _ "File Name w/o Ext " & @TAB & $sFilenameExExt & @CRLF & _ "Dot Extension " & @TAB & $sDotExt & @CRLF & _ "Extension " & @TAB & $sExt & @CRLF)M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
DXRW4E Posted March 9, 2014 Share Posted March 9, 2014 (edited) @Melba23 trytest "C:Program FilesAnother DirAutoIt3/AutoIt3.chm" ehhhhh, the _PathSplit() is a function much much better, calculates many more scenarios ect ect ect ect, is better (recommend) for all users always use the _PathSplit() to be more practicalfasterSafe @doestergaard http://www.autoitscript.com/autoit3/docs/libfunctions/_PathSplit.htm #include <Array.au3> #include <File.au3> Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "" Local $aPathSplit = _PathSplit("Z:\images\*.wim", $sDrive, $sDir, $sFilename, $sExtension) _ArrayDisplay($aPathSplit, "_PathSplit of Z:\images\*.wim") ;;$aPathSplit ;~ Row|Col 0 ;~ [0]|Z:\images\*.wim ;~ [1]|Z: ;~ [2]|\images\ ;~ [3]|* ;~ [4]|.wim what is wrong ?????? Ciao. Edited March 9, 2014 by DXRW4E Link to comment Share on other sites More sharing options...
doestergaard Posted March 9, 2014 Author Share Posted March 9, 2014 @Melba23 The code does remove the ".wim" extension, but only if I give it a direct point to the file, I need this to be done for all files the script finds in that folder, that have ".wim" extension. @DXRW4E Tried your code, but I don't know how to get it to display in the combo box - also, will _pathsplit do this for all files in the folder? Thank you both Link to comment Share on other sites More sharing options...
DXRW4E Posted March 9, 2014 Share Posted March 9, 2014 (edited) I have no idea what you want to do them, but here is a general exampleexpandcollapse popup#include <GuiComboBox.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <Array.au3> #include <File.au3> Example() Func Example() Local $hCombo ; Create GUI GUICreate("ComboBox Set Cur Sel", 400, 296) $hCombo = GUICtrlCreateCombo("", 2, 2, 396, 296) GUISetState(@SW_SHOW) ; Add files _GUICtrlComboBox_BeginUpdate($hCombo) _GUICtrlComboBox_AddDir($hCombo, "D:\IRM_CCSA_X64FRE_EN-US_DV5\sources\*.wim") _GUICtrlComboBox_EndUpdate($hCombo) ; Select Item _GUICtrlComboBox_SetCurSel($hCombo, 1) ; Get Cur Sel MsgBox($MB_SYSTEMMODAL, "Information", "Cur Sel: " & _GUICtrlComboBox_GetCurSel($hCombo)) Local $aPathSplit, $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "" $aList = _GUICtrlComboBox_GetListArray($hCombo) For $x = 1 To $aList[0] $aPathSplit = _PathSplit("D:\IRM_CCSA_X64FRE_EN-US_DV5\sources\" & $aList[$x], $sDrive, $sDir, $sFilename, $sExtension) _ArrayDisplay($aPathSplit, "_PathSplit of " & $aList[$x]) ;MemoWrite($aList[$x]) Next ;or Local $sText _GUICtrlComboBox_GetLBText($hCombo, _GUICtrlComboBox_FindString($hCombo, "install"), $sText) $aPathSplit = _PathSplit("D:\IRM_CCSA_X64FRE_EN-US_DV5\sources\" & $sText, $sDrive, $sDir, $sFilename, $sExtension) _ArrayDisplay($aPathSplit, "_PathSplit of " & $sText) ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>ExampleCiao. Edited March 9, 2014 by DXRW4E Link to comment Share on other sites More sharing options...
doestergaard Posted March 9, 2014 Author Share Posted March 9, 2014 (edited) @DXRW4E I want it to remove the file extension for every file in "Z:images" - doesn't matter if they are .wim files or whatever, just want them gone without having to point to every single file But as I can see, vbscript would do the trick much easier, so I will have to find a way to use that instead Thank you for your help Edited March 9, 2014 by doestergaard Link to comment Share on other sites More sharing options...
DXRW4E Posted March 9, 2014 Share Posted March 9, 2014 (edited) #include <File.au3> #include <Array.au3> Local $sFile, $aFileList = _FileListToArray("Z:\images\", "*",1, True) If @Error Then ;;;error Else For $i = 1 To $aFileList[0] ;FileMove($aFileList[$i], StringRegExpReplace($aFileList[$i] & " ", "(\.[^\.\/\\]*)?\h$", "")) ; does not make sense to do so ???????? ;;or $aFileList[$i] = StringRegExpReplace($aFileList[$i] & " ", "(\.[^\.\/\\]*)?\h$", "") Next EndIf ;;; do what you want with (arrays) $aFileList _ArrayDisplay($aFileList)Or Search SubDirectory _FileListToArrayEx '?do=embed' frameborder='0' data-embedContent>>expandcollapse popup#include <Array.au3> $aFileList = _FileListToArrayEx("Z:\images\", "*", 13) If @Error Then ;;;error Else For $i = 1 To $aFileList[0] ;FileMove($aFileList[$i], StringRegExpReplace($aFileList[$i] & " ", "(\.[^\.\/\\]*)?\h$", "")) ; does not make sense to do so ???????? ;;or $aFileList[$i] = StringRegExpReplace($aFileList[$i] & " ", "(\.[^\.\/\\]*)?\h$", "") Next EndIf ;;; do what you want with (arrays) $aFileList _ArrayDisplay($aFileList) ; #FUNCTION# ======================================================================================================================================================= ; Name...........: _FileListToArrayEx ; Description ...: Lists files and\or folders in a specified path (Similar to using Dir with the /B Switch) ; Syntax.........: _FileListToArrayEx($sPath[, $sFilter = "*"[, $iFlag = 0]]) ; Parameters ....: $sPath - Path to generate filelist for. ; $sFilter - Optional the filter to use, default is *. (Multiple filter groups such as "All "*.png|*.jpg|*.bmp") Search the Autoit3 helpfile for the word "WildCards" For details. ; $iFlag - Optional: specifies whether to return files folders or both Or Full Path (add the flags together for multiple operations): ; |$iFlag = 0 (Default) Return both files and folders ; |$iFlag = 1 Return files only ; |$iFlag = 2 Return Folders only ; |$iFlag = 4 Search SubDirectory ; |$iFlag = 8 Return Full Path ; |$iFlag = 16 $sFilter do Case-Sensitive matching (By Default $sFilter do Case-Insensitive matching) ; |$iFlag = 32 Disable the return the count in the first element - effectively makes the array 0-based (must use UBound() to get the size in this case). ; By Default the first element ($array[0]) contains the number of file found, the remaining elements ($array[1], $array[2], etc.) ; |$iFlag = 64 $sFilter is REGEXP Mod, See Pattern Parameters in StringRegExp (Can not be combined with flag 16) ; |$iFlag = 128 Return Backslash at the beginning of the file name, example Return "\Filename1.xxx" (Can not be combined with flag 8) ; Return values .: Failure - @Error ; |1 = Path not found or invalid ; |2 = Invalid $sFilter ; |3 = No File(s) Found ; Author ........: DXRW4E ; Modified.......: ; Remarks .......: The array returned is one-dimensional and is made up as follows: ; $array[0] = Number of Files\Folders returned ; $array[1] = 1st File\Folder ; $array[2] = 2nd File\Folder ; $array[3] = 3rd File\Folder ; $array[n] = nth File\Folder ; Related .......: ; Link ..........: ; Example .......: Yes ; Note ..........: Special Thanks to SolidSnake & Tlem ; ================================================================================================================================================================== Func _FileListToArrayEx($sPath, $sFilter = "*", $iFlag = 0) $sPath = StringRegExpReplace($sPath & "\", "(?!\A)[\\/]+\h*", "\\") If Not FileExists($sPath) Then Return SetError(1, 1, "") If StringRegExp($sFilter, StringReplace('^\s*$|\v|[\\/:><"]|^\||\|\||\|$', "[" & Chr(BitAND($iFlag, 64) + 28) & '\/:><"]|^\||\|\||\|$', "\\\\")) Then Return SetError(2, 2, "") Local $hSearch, $sFile, $sFileList, $sSubDir = BitAND($iFlag, 4), $sDelim = "|", $sDirFilter = StringReplace($sFilter, "*", "") $hSearch = FileFindFirstFile($sPath & "*") If @Error Then Return SetError(3, 3, "") Local $hWSearch = $hSearch, $hWSTMP, $SearchWD, $Extended, $iFlags = StringReplace(BitAND($iFlag, 1) + BitAND($iFlag, 2), "3", "0") If BitAND($iFlag, 8) Then $sDelim &= $sPath If BitAND($iFlag, 128) Then $sDelim = "|\" If Not BitAND($iFlag, 64) Then $sFilter = StringRegExpReplace(BitAND($iFlag, 16) & "(?i)(", "16\(\?\i\)|\d+", "") & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($sFilter, "[^*?|]+", "\\Q$0\\E"), "\\E(?=\||$)", "$0\$"), "(?<=^|\|)\\Q", "^$0"), "\*+", ".*") & ")" While 1 $sFile = FileFindNextFile($hWSearch) If @Error Then If $hWSearch = $hSearch Then ExitLoop FileClose($hWSearch) $hWSearch -= 1 $SearchWD = StringLeft($SearchWD, StringInStr($SearchWD, "\", 1, -2)) ElseIf $sSubDir Then $Extended = @Extended If ($iFlags + $Extended <> 2) Then If $sDirFilter Then If StringRegExp($sFile, $sFilter) Then $sFileList &= $sDelim & $SearchWD & $sFile Else $sFileList &= $sDelim & $SearchWD & $sFile EndIf EndIf If Not $Extended Then ContinueLoop $hWSTMP = FileFindFirstFile($sPath & $SearchWD & $sFile & "\*") If $hWSTMP = -1 Then ContinueLoop $hWSearch = $hWSTMP $SearchWD &= $sFile & "\" Else If ($iFlags + @Extended = 2) Or StringRegExp($sFile, $sFilter) = 0 Then ContinueLoop $sFileList &= $sDelim & $sFile EndIf WEnd FileClose($hSearch) If Not $sFileList Then Return SetError(3, 3, "") Return StringSplit(StringTrimLeft($sFileList, 1), "|", StringReplace(BitAND($iFlag, 32), "32", 2)) EndFunc ;==>_FileListToArrayExCiao. Edited March 9, 2014 by DXRW4E Link to comment Share on other sites More sharing options...
doestergaard Posted March 9, 2014 Author Share Posted March 9, 2014 (edited) If anyone want the complete solution how to filter files from a specific folder, in this case .Wim files, remove the file extension and display it in a combo box, here it is: ; Create combobox $sSelectOS = GUICtrlCreateCombo ( "", 106, 167, 412, 300, $CBS_DROPDOWNLIST ) ; Get wim files from folder $sWMIService = ObjGet ( "winmgmts:\\" & @ComputerName & "\root\cimv2" ) If IsObj ( $sWMIService ) Then $colItems = $sWMIService.ExecQuery ( "SELECT * FROM CIM_Datafile WHERE DRIVE='z:' AND PATH='\\images\\' AND EXTENSION='wim'" ) For $objItems In $colItems $sGetWimFile = $objItems.FileName $sWimFile = _StringProper ( $sGetWimFile ) _GUICtrlComboBox_InsertString ( $sSelectOS, $sWimFile ) _GUICtrlComboBox_SetCurSel ( $sSelectOS, 0 ) Next EndIf And it was simple too! Edited March 10, 2014 by doestergaard Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 10, 2014 Moderators Share Posted March 10, 2014 doestergaard, @Melba23The code does remove the ".wim" extension, but only if I give it a direct point to the file, I need this to be done for all files the script finds in that folder, that have ".wim" extension._FileListToArray. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
doestergaard Posted March 10, 2014 Author Share Posted March 10, 2014 (edited) @Melba23 I read the basics about _FileListToArray from the help file and created this: #include <GUIComboBox.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <Array.au3> ; Create combobox $SelectOS = GUICtrlCreateCombobox ( "", 106, 167, 412, 200, $CBS_DROPDOWNLIST ) ; Get wim files from folder $WimPath = "Z:\images" $WimFiles = _FileListToArray ( $WimPath, "*.wim" ) _ArraySort ( $WimFiles, 0, 1 ) For $i = 1 To UBound ( $WimFiles ) -1 $ListOS = StringRegExpReplace ( $WimFiles[$i], "^.*\\|\..*$", "" ) GUICtrlSetData ( $SelectOS, $ListOS ) Next _GUICtrlComboBox_SetCurSel ( $SelectOS, 0 ) If $WimFiles = "" Then MsgBox ( $MB_ICONWARNING, "OS Deployment", "WARNING! No operating systems found!" ) EndIf It worked, thanks! Edited March 10, 2014 by doestergaard TOTOTO 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now