clear cFolder = 'D:\examples\lionel\jpgs\' //Include final \ aFiles = new Array() nFiles = aFiles.dir(cFolder+'li*.jpg') f = new file() nCount = nFiles for nFile = 1 to nFiles if cFolder+aFiles[ nFile,1] # update_sku1(cFolder+aFiles[nFile,1]) nCount -- ? 'Changed '+cFolder+aFiles[ nFile,1],' to ',update_sku1(cFolder+aFiles[nFile,1]) f.rename(cFolder+aFiles[ nFile,1],update_sku1(cFolder+aFiles[nFile,1])) endif next If nCount = nFiles msgbox('No files were renamed','Done') endif function update_sku1(cString) oRegExp = new OleAutoClient("VBScript.RegExp") oRegExp.global := true oRegExp.ignoreCase := true oRegExp.Pattern := "(\D+\\LI\d)(\d{3})([^\.|\d]\D+)" // (\D+\\LI\d]) Everything up to LI in filename. Only accept 2 characters + 1 digit // (\d{3}) Next 3 digits after LI+digit If only 3 digits in name it will fail. If 5 digits the next test will fail // ([^\.|\d]\D+) [^\.|\d] The first character after the 4 digits must not be . or a digit // \D+ Everything after the 4 digits must be characters. a = oRegExp.execute( cString ) // This creates an array of matches for the regexp in each set of brackets. cNew = '' if oRegExp.test(cString) // D:\examples\lionel\jpg\li1234ex.jpg // If all 3 sets of brackets return something we can proceed. // If one or more set of brackes does not return a string the test fails // and cNew is empy. cNew = a.item(0).submatches.item(0) // D:\examples\lionel\jpg\li1 cNew=stuff(cNew,len(cNew),0,'0') // D:\examples\lionel\jpg\li01 cNew+= a.item(0).submatches.item(1) // 234 cNew+= a.item(0).submatches.item(2) // ex.jpg else ?'Name not changed ',cstring endif return cNew //D:\examples\lionel\jpg\li01234ex.jpg