Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

sammy.d

macrumors regular
Original poster
Jun 18, 2010
109
0
Hi,
I have a movies folder containing movie files (... pretty special eh!) and I would like an applescript script to be able to create new subfolders within that movies parent folder with names corresponding to the names of the movies and then move the movie file into the corresponding sub folder. That probably seems pretty confusing so here's the scenario:
I have the movies 300 and Avatar in my movies folder. I want to create new folders within the movies folder called 300 and Avatar. I want to move the two movie files into their respective newly created folders. However, I have much more than two movie files.

Could someone suggest a script for this? I assume it would be pretty short and simple...
 
Sorry to awnser your question with more questions.

Do you know any Applescript ?

How many Movie files are you talking about ?

Do you know, that if you have more than a couple of dozen files, that the
process would be very slow with Applescript ?

Awnser these questions, and I'll post some kind of Applescript solution for you.

Regards Mark
 
Hi Mark,
I know a very tiny little bit... but have forgotten most of it! However (like most people) I can look at a script and work out what it is doing...

There is about 45 items in the folder.

I didn't realise it would be slow but surely it will still be faster than doing them all by hand...?

Cheers.
 
Yes it will be faster than by hand.

I am writing and testing some Applescript, that might do the job for you.

But it's not as short and simple as you might think.
bare with me and I'll see what I can come up with.

Are your movies in the stabdard Movies folder of the user ?

Regards Mark
 
I really appreciate it mate.

They are in a folder called "movies" within the "movie folder in my home directory... /Users/home/Movies/Movies
 
Yes I created it. Within the ~/Movies folder I have tv shows and other videos so I have created a separate sub folder for my actual movies.
 
OK Sammy, I've come up with some Applescript code for you,
Its not too refined, but it does work.
Copy and Paste this code into the Applescript Editor, then you can
either run it from there, or you can save it as a compiled Applescript,
that can be double clicked like an app to run.

Code:
on run {}
	try
		set movies_folder to (path to movies folder) & "Movies" as text
		set movies_folder to movies_folder as alias
	on error error_message number error_number
		display alert error_message & space & error_number ¬
			message "An Error occured while trying to find the folder " & (movies_folder as text) & "." & return & ¬
			"Or an Error occured, while trying to convert the folder " & (movies_folder as text) & return & ¬
			"into type, Applescript Alias." as warning giving up after 30
		return
	end try
	tell application "Finder"
		set all_movie_files to every file in movies_folder as list
		set movie_files to name of every file in movies_folder as list
		set default_text_item_delimiters to AppleScript's text item delimiters
		set AppleScript's text item delimiters to "."
		set movie_file_names to {}
		repeat with movie_name from 1 to length of movie_files
			set movie_file_name to text item 1 of (item movie_name of movie_files) as text
			set end of movie_file_names to movie_file_name
			try
				set new_movie_folder to make new folder in movies_folder with properties {name:movie_file_name}
				delay (0.25)
				if new_movie_folder exists then
					try
						move (item movie_name of all_movie_files) to new_movie_folder replacing yes
					on error error_message number error_number
						display alert error_message & space & error_number ¬
							message "An Error occured while trying to move the movie file." & return & ¬
							movie_file_name & ", to the newly created movie folder." as warning giving up after 30
						return
					end try
				end if
			on error
				if (movie_name + 1) is less than (length of movie_files) then
					set movie_name to (movie_name + 1)
				else if (movie_name + 1) is equal to (length of movie_files) then
					exit repeat
				end if
			end try
		end repeat
		set AppleScript's text item delimiters to default_text_item_delimiters
	end tell
	return
end run

hope this is what your looking for, as you can run it time and again, as
it wont redo folders that already exist.

Regards Mark
 
Thanks sooooooo much for doing that. However, I have a small problem... I am probably doing something very stupidly wrong.

In the third line, I assume I was supposed to replace
Code:
(path to movies folder)
with the actual path...

So my third line reads
Code:
set movies_folder to /Users/sam/Movies/Movies & "Movies" as text
but when I go to compile it, I get an error
Code:
Syntax Error
Expected expression but found “/”.

What am I doing wrong??

Sorry, but I never properly learnt any applescript, I used to just mess around and copy and paste things that I got to work...
 
The Finder does not like POSIX (slash delimited) paths, but in your example the main problem is that you forgot to quote the text string.

There are several built-in paths that a script can get - path to movies folder is a Standard Additions (a scripting addition) command to return the path to the current user's movies folder, so in this particular case you don't need to change it.
 
That works perfect!!!

Ummm... say I wanted to reverse this script, ie take the files out of their individual folders, would it be hard to make a script for that?
 
Not really too difficult, although it depends a bit on how many levels deep you want to go, or if there are folders you want to leave alone. If there are just the new folders that the previous script created, you can get the documents of the entire contents of the original folder and move the files there, for example:

Code:
set sourceFolder to (choose folder with prompt "Files of the chosen folder will be moved out of their containing folders.")
tell application "Finder" to repeat with aFile in (get files of entire contents of sourceFolder)
	try
		move aFile to sourceFolder
	on error errmess -- duplicate name, etc
		log errmess -- just skip it and log the error
	end try
end repeat

Although I usually make some test file copies to play with so that I don't wind up having to find them or put them back if things don't work out right...
 
As Red Menace has advised, you could alter the script I posted, to do the reverse job.

This line in the script, could be changed to list all of the folders in the Movies
folder, instead of the files.

Code:
set all_movie_files to every file in movies_folder as list

changed to this

Code:
set all_movie_folders to every folder in movies_folder as list

this is not the only line of code you would need to change, but it gives you
the ideas involved to adapt my script.

I would advise you to buy a good book on the basics of Applescript, and
this sort of script will suddenly become quit simple for you to write.
And I think you wont regret learning Applescript, as its great fun, and a useful
tool for little utility programs.

Regards Mark
 
This works perfectly guys!!! Thank you soooo much for your help :)

And yes, I will try and learn some Applescript, I imagine it would be quite handy.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.