List all files in folder and subfolders

Anyone, especially newbies, asking for help with Photoshop Scripting and Photoshop Automation - as opposed to those contributing to discussion about an aspect of Photoshop Scripting

Moderators: Tom, Kukurykus

User avatar
Scriptor
Posts: 29
Joined: Tue Oct 01, 2019 12:07 pm

List all files in folder and subfolders

Post by Scriptor »

Hey guys!
Im trying to get a list of all files (doesn't really matter what extension) that exists in a folder and it's subfolders.
So far I've tried a few solutions without coming up with anything simple and reliable. I did try this;
https://community.adobe.com/t5/photosho ... -p/5162230

But it returns that "sFolders.getFiles(); is not a function.", and since it's friday afternoon I guess my brain is mush.

Anyhow - I just want a simple array containing all files (including their searchway) based on whatever input folder you select.
How would I achieve this?

Professional AI Audio Generation within Adobe Premiere Pro - Download Free Plugin here

User avatar
Kukurykus
Posts: 531
Joined: Mon Jul 25, 2016 12:36 pm

Re: List all files in folder and subfolders

Post by Kukurykus »

After Adobe transited their forums from old platform, the parts of codes like for ex. [ i ] were lost.
User avatar
Scriptor
Posts: 29
Joined: Tue Oct 01, 2019 12:07 pm

Re: List all files in folder and subfolders

Post by Scriptor »

Relized someone else might be interrested in this. Here's an overly complex solution that I made shortly after posting the question.
I know it's really ugly, but at the time I just wanted something that did the job, and I'm not too concerned about how long time it takes to get all files.

Enjoy!

Code: Select all

	var ReturnArray = [];
	var GlobalFiles = [];
	var GlobalFolders = [];
	var allFoldersList = getAllFolders(Folder.selectDialog("Select Inputfolder"));
		for (i = 0; i < allFoldersList.length; i++) {
			//alert("Searching in folder:\n" + allFoldersList[i]);
			
			var FolderContentArray = new Folder(allFoldersList[i]);
			var FolderContentArray = FolderContentArray.getFiles(); //Array of File objects
			for (y = 0; y < FolderContentArray.length; y++) {											//For each array item
				GlobalFiles.push(FolderContentArray[y] + "\n");
			}
		}
	alert(GlobalFiles);	//Do whatever you want with the output
	
	
	function getAllFolders(selectedFolder){
		var displayerror = 0;
		if(selectedFolder == null) {alert("No folder selected.");return;}
		var folderList = [];
		GlobalFolders.push(selectedFolder);
		
		try{
			folderList[0] = selectedFolder.getFiles(function(f) { return f instanceof Folder; }); 
			GlobalFolders.push(folderList[0]);
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		try{
			folderList[1] = []; 
			for (y = 0; y < folderList[0].length; y++) {
				if (y == 0) {
					folderList[1] = folderList[1] + folderList[0][y].getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[1] = folderList[1] + "," + folderList[0][y].getFiles(function(f) { return f instanceof Folder; });
				}
			}
			GlobalFolders.push(folderList[1]);
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}	
		
		try{
			folderList[1] = folderList[1].split(",");
			folderList[2] = [];
			for (y = 0; y < folderList[1].length; y++) {
				var tempfile = new Folder(folderList[1][y]);
				if (y == 0) {
					folderList[2] = folderList[2] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[2] = folderList[2] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[2] = folderList[2].split(",");
			GlobalFolders.push(folderList[2]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			folderList[3] = [];
			for (y = 0; y < folderList[2].length; y++) {
				var tempfile = new Folder(folderList[2][y]);
				if (y == 0) {
					folderList[3] = folderList[3] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[3] = folderList[3] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[3] = folderList[3].split(",");
			GlobalFolders.push(folderList[3]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[3].length; y++) {
				var tempfile = new Folder(folderList[3][y]);
				if (y == 0) {
					folderList[4] = folderList[4] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[4] = folderList[4] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[4] = folderList[4].split(",");
			GlobalFolders.push(folderList[4]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[4].length; y++) {
				var tempfile = new Folder(folderList[4][y]);
				if (y == 0) {
					folderList[5] = folderList[5] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[5] = folderList[5] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[5] = folderList[5].split(",");
			GlobalFolders.push(folderList[5]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[5].length; y++) {
				var tempfile = new Folder(folderList[5][y]);
				if (y == 0) {
					folderList[6] = folderList[6] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[6] = folderList[6] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[6] = folderList[6].split(",");
			GlobalFolders.push(folderList[6]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[6].length; y++) {
				var tempfile = new Folder(folderList[6][y]);
				if (y == 0) {
					folderList[7] = folderList[7] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[7] = folderList[7] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[7] = folderList[7].split(",");
			GlobalFolders.push(folderList[7]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[7].length; y++) {
				var tempfile = new Folder(folderList[7][y]);
				if (y == 0) {
					folderList[8] = folderList[8] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[8] = folderList[8] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[8] = folderList[8].split(",");
			GlobalFolders.push(folderList[8]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[8].length; y++) {
				var tempfile = new Folder(folderList[8][y]);
				if (y == 0) {
					folderList[9] = folderList[9] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[9] = folderList[9] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[9] = folderList[9].split(",");
			GlobalFolders.push(folderList[9]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[9].length; y++) {
				var tempfile = new Folder(folderList[9][y]);
				if (y == 0) {
					folderList[10] = folderList[10] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[10] = folderList[10] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[10] = folderList[10].split(",");
			GlobalFolders.push(folderList[10]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[10].length; y++) {
				var tempfile = new Folder(folderList[10][y]);
				if (y == 0) {
					folderList[11] = folderList[11] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[11] = folderList[11] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[11] = folderList[11].split(",");
			GlobalFolders.push(folderList[11]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		var tempitem = GlobalFolders.toString('');
		var temparray = tempitem.split(",");
		var ReturnArray = [temparray[0]];
		var identical = 0;
		
		for (var i = 0; i < temparray.length; i++) {  
			for (x = 0; x < ReturnArray.length; x++) {
				if (identical == 1) {break;}
				var string1 = temparray[i].toString('');
				var string2 = ReturnArray[x].toString('');
				if (StringMatches(string1, string2)) {
					identical = 1;
				}
			}
			if (identical === 0){
				var identical = 0;
				ReturnArray.push(temparray[i].toString(''));
			} else {
				var identical = 0;
			}
		}
		return ReturnArray;
	}
chivedistant
Posts: 2
Joined: Mon Jan 16, 2023 1:56 am

Re: List all files in folder and subfolders

Post by chivedistant »

Scriptor wrote: Fri Aug 05, 2022 10:04 am Relized someone else might be interrested in this. Here's an overly complex solution that I made shortly after posting the question.
I know it's really ugly geometry dash world but at the time I just wanted something that did the job, and I'm not too concerned about how long time it takes to get all files.

Enjoy!

Code: Select all

	var ReturnArray = [];
	var GlobalFiles = [];
	var GlobalFolders = [];
	var allFoldersList = getAllFolders(Folder.selectDialog("Select Inputfolder"));
		for (i = 0; i < allFoldersList.length; i++) {
			//alert("Searching in folder:\n" + allFoldersList[i]);
			
			var FolderContentArray = new Folder(allFoldersList[i]);
			var FolderContentArray = FolderContentArray.getFiles(); //Array of File objects
			for (y = 0; y < FolderContentArray.length; y++) {											//For each array item
				GlobalFiles.push(FolderContentArray[y] + "\n");
			}
		}
	alert(GlobalFiles);	//Do whatever you want with the output
	
	
	function getAllFolders(selectedFolder){
		var displayerror = 0;
		if(selectedFolder == null) {alert("No folder selected.");return;}
		var folderList = [];
		GlobalFolders.push(selectedFolder);
		
		try{
			folderList[0] = selectedFolder.getFiles(function(f) { return f instanceof Folder; }); 
			GlobalFolders.push(folderList[0]);
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		try{
			folderList[1] = []; 
			for (y = 0; y < folderList[0].length; y++) {
				if (y == 0) {
					folderList[1] = folderList[1] + folderList[0][y].getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[1] = folderList[1] + "," + folderList[0][y].getFiles(function(f) { return f instanceof Folder; });
				}
			}
			GlobalFolders.push(folderList[1]);
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}	
		
		try{
			folderList[1] = folderList[1].split(",");
			folderList[2] = [];
			for (y = 0; y < folderList[1].length; y++) {
				var tempfile = new Folder(folderList[1][y]);
				if (y == 0) {
					folderList[2] = folderList[2] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[2] = folderList[2] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[2] = folderList[2].split(",");
			GlobalFolders.push(folderList[2]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			folderList[3] = [];
			for (y = 0; y < folderList[2].length; y++) {
				var tempfile = new Folder(folderList[2][y]);
				if (y == 0) {
					folderList[3] = folderList[3] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[3] = folderList[3] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[3] = folderList[3].split(",");
			GlobalFolders.push(folderList[3]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[3].length; y++) {
				var tempfile = new Folder(folderList[3][y]);
				if (y == 0) {
					folderList[4] = folderList[4] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[4] = folderList[4] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[4] = folderList[4].split(",");
			GlobalFolders.push(folderList[4]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[4].length; y++) {
				var tempfile = new Folder(folderList[4][y]);
				if (y == 0) {
					folderList[5] = folderList[5] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[5] = folderList[5] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[5] = folderList[5].split(",");
			GlobalFolders.push(folderList[5]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[5].length; y++) {
				var tempfile = new Folder(folderList[5][y]);
				if (y == 0) {
					folderList[6] = folderList[6] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[6] = folderList[6] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[6] = folderList[6].split(",");
			GlobalFolders.push(folderList[6]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[6].length; y++) {
				var tempfile = new Folder(folderList[6][y]);
				if (y == 0) {
					folderList[7] = folderList[7] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[7] = folderList[7] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[7] = folderList[7].split(",");
			GlobalFolders.push(folderList[7]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[7].length; y++) {
				var tempfile = new Folder(folderList[7][y]);
				if (y == 0) {
					folderList[8] = folderList[8] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[8] = folderList[8] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[8] = folderList[8].split(",");
			GlobalFolders.push(folderList[8]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[8].length; y++) {
				var tempfile = new Folder(folderList[8][y]);
				if (y == 0) {
					folderList[9] = folderList[9] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[9] = folderList[9] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[9] = folderList[9].split(",");
			GlobalFolders.push(folderList[9]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[9].length; y++) {
				var tempfile = new Folder(folderList[9][y]);
				if (y == 0) {
					folderList[10] = folderList[10] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[10] = folderList[10] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[10] = folderList[10].split(",");
			GlobalFolders.push(folderList[10]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		try{
			for (y = 0; y < folderList[10].length; y++) {
				var tempfile = new Folder(folderList[10][y]);
				if (y == 0) {
					folderList[11] = folderList[11] + tempfile.getFiles(function(f) { return f instanceof Folder; });
				} else {
					folderList[11] = folderList[11] + "," + tempfile.getFiles(function(f) { return f instanceof Folder; });
				}
			folderList[11] = folderList[11].split(",");
			GlobalFolders.push(folderList[11]);
			}
		} catch(error) {
			if (displayerror == 1) {
				alert(error);
			}
		}
		
		var tempitem = GlobalFolders.toString('');
		var temparray = tempitem.split(",");
		var ReturnArray = [temparray[0]];
		var identical = 0;
		
		for (var i = 0; i < temparray.length; i++) {  
			for (x = 0; x < ReturnArray.length; x++) {
				if (identical == 1) {break;}
				var string1 = temparray[i].toString('');
				var string2 = ReturnArray[x].toString('');
				if (StringMatches(string1, string2)) {
					identical = 1;
				}
			}
			if (identical === 0){
				var identical = 0;
				ReturnArray.push(temparray[i].toString(''));
			} else {
				var identical = 0;
			}
		}
		return ReturnArray;
	}
Not too bad. It's work.
User avatar
Scriptor
Posts: 29
Joined: Tue Oct 01, 2019 12:07 pm

Re: List all files in folder and subfolders

Post by Scriptor »

This works better though:

Code: Select all

	function main() {
		var folder = Folder.selectDialog("Select a folder to list files from");
		var RW_destination = folder;
		if (!folder) return;

		var includePaths = confirm("Do you want to include file paths in the results?");

		var fileList = [];
		getFileList(folder);

		if (fileList.length > 0) {
			var fileListString = fileList.join("\n");
				
			// DIALOG
			// ======
			var dialog = new Window("dialog"); 
				dialog.text = "Filelister"; 
				dialog.orientation = "column"; 
				dialog.alignChildren = ["center","top"]; 
				dialog.spacing = 10; 
				dialog.margins = 16; 

			// GROUP1
			// ======
			var group1 = dialog.add("group", undefined, {name: "group1"}); 
				group1.orientation = "column"; 
				group1.alignChildren = ["left","center"]; 
				group1.spacing = 10; 
				group1.margins = 0; 

			// PANEL1
			// ======
			var panel1 = group1.add("panel", undefined, undefined, {name: "panel1"}); 
				panel1.text = "Output"; 
				panel1.orientation = "column"; 
				panel1.alignChildren = ["left","top"]; 
				panel1.spacing = 10; 
				panel1.margins = 10; 

			var edittext1 = panel1.add('edittext {size: [300,500], properties: {name: "edittext1", readonly: true, multiline: true, scrollable: true}}'); 
				edittext1.text = fileListString; 

			var button1 = panel1.add("button", undefined, undefined, {name: "button1"}); 
				button1.text = "Choose where to save TXT-File"; 
				button1.preferredSize.width = 300; 
				button1.addEventListener("click", function(){
					RW_destination = Folder.selectDialog("Select Output folder");
					var RW_File = new File(RW_destination + "/Output.txt");
					RW_File.open('w');
					RW_File.writeln(fileListString);			//Writes entry
					while(!RW_File.eof)
					RW_File.close();
					//HERE
					//dialog.hide();
					button1.text = RW_destination;
					});

			// GROUP2
			// ======
			var group2 = panel1.add("group", undefined, {name: "group2"}); 
				group2.preferredSize.width = 300; 
				group2.orientation = "row"; 
				group2.alignChildren = ["center","center"]; 
				group2.spacing = 10; 
				group2.margins = 0; 

			var button2 = group2.add("button", undefined, undefined, {name: "button2"}); 
				button2.text = "OK"; 

			var divider1 = group2.add("panel", undefined, undefined, {name: "divider1"}); 
				divider1.alignment = "fill"; 

			var statictext1 = group2.add("statictext", undefined, undefined, {name: "statictext1"}); 
				statictext1.text = "Made by Edvard Gullholmer"; 

			dialog.show();
		} else {
			alert("No files found in the selected folder.");
		}

		function getFileList(folder) {
			var files = folder.getFiles();
			for (var i = 0; i < files.length; i++) {
				var file = files[i];
				if (file instanceof Folder) {
					getFileList(file); // Recursive call for subfolders
				} else {
					var filePath = includePaths ? file.fsName : file.name;
					fileList.push(filePath);
				}
			}
		}
	}

	main();