file to folder applescript

Discussion in 'Mac Programming' started by sammy.d, Dec 29, 2011.

  1. macrumors regular

    Joined:
    Jun 18, 2010
    #1
    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...
     
  2. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #2
    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
     
  3. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #3
    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.
     
  4. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #4
    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
     
  5. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #5
    I really appreciate it mate.

    They are in a folder called "movies" within the "movie folder in my home directory... /Users/home/Movies/Movies
     
  6. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #6
    The standard OSX foder is just ~/Movies not ~/Movies/Movies.

    Have you created that sub folder yourself ?

    Mark
     
  7. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #7
    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.
     
  8. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #8
    OK I'm still working on it for you.

    It's gone midnight here, so I will post something for you tommorrow night.

    Regards Mark
     
  9. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #9
    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
     
  10. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #10
    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...
     
  11. macrumors 6502

    Joined:
    May 29, 2011
    Location:
    Littleton, Colorado, USA
    #11
    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.
     
  12. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #12
    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?
     
  13. macrumors 6502

    Joined:
    May 29, 2011
    Location:
    Littleton, Colorado, USA
    #13
    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...
     
  14. macrumors member

    Mark FX

    Joined:
    Nov 18, 2011
    #14
    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
     
  15. thread starter macrumors regular

    Joined:
    Jun 18, 2010
    #15
    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.
     

Share This Page