get list of all files in a folder (and subfolders)

Average rating
(0 votes)

Acts like "dir" to get a list of all files in a given folder.
Subfolders are searched by default, set recurse=0 to disable this.
Tested in MS Windows.

// Given a path to a folder on disk, gets all files ending in "ext" 
Function/S findFiles(path, ext[, recurse])
// By default, subfolders are searched. Turn off with recurse=0.
// 2017-05-02, joel corbin
//
	string path, ext; variable recurse
 
	if (paramIsDefault(recurse))
		recurse=1
	endif
	path = sanitizeFilePath(path)												// may not work in extreme cases
 
	string fileList=""
	string files=""
	string pathName = "tmpPath"
	string folders =path+";" 													// Remember the full path of all folders in "path" & search each for "ext" files
	string fldr
	do
		fldr = stringFromList(0,folders)
		NewPath/O/Q $pathName, fldr												// sets S_path=$path, and creates the symbolic path needed for indexedFile()
		PathInfo $pathName
		files = indexedFile($pathName,-1,ext)									// get file names
		if (strlen(files))
			files = fldr+":"+ replaceString(";", removeEnding(files), ";"+fldr+":")	// add the full path (folders 'fldr') to every file in the list
			fileList = addListItem(files,fileList)
		endif
		if (recurse)
			folders += indexedDir($pathName,-1,1)								// get full folder paths
		endif
		folders = removeFromList(fldr, folders)									// Remove the folder we just looked at
	while (strlen(folders))
	KillPath $pathName
	return fileList
End
 
static function /s sanitizeFilePath(path)
	// Avoid annoyances with escape characters when using Microsoft Windows directories.
 
	string path
	path = replaceString("\t", path, "\\t")
	path = replaceString("\r", path, "\\r")
	path = replaceString("\n", path, "\\n")
 
	return path
end

Back to top