TweetFollow Us on Twitter

Using Repeat Loops in AppleScript

Volume Number: 20 (2004)
Issue Number: 12
Column Tag: Programming

AppleScript Essentials

by Benjamin S. Waldie

Should I Repeat Myself?

Using Repeat Loops in AppleScript

For the past couple of months, we have been talking about some basic Finder scripting. Now we are going to switch gears and get back to some basics of AppleScript. In this month's article, we will discuss the various types of repeat loops that you can use when you are scripting.

Why You Need Repeat Loops

Repeat loops are invaluable when writing AppleScript code, because you will frequently need to perform a single task more than once. While in some cases, you could simply write the same code over and over again in order to achieve the same result, in other instances, you cannot.

For example, let's say that you have a folder containing 10 files, and you want to rename all of them with a unique numeric extension from 1 to 10. You could write a repetitive AppleScript that would rename the files in this manner without a repeat loop. However, why would you want to do that? It would take a while to write, and it would be kind of a pain in the neck if you wanted to go back and change the code. For example, what if, after writing the code, you changed your mind and now you want the files to be named from 11 to 20? You would need to go back through all of your code and restructure it. Isn't one of the primary functions of AppleScript to automate things? So, why not automate your code?

In some cases, the only way to accomplish a task is to use a repeat loop. For example, let's say that you need a script that will rename files in a folder. However, the number of files in the folder may change each time the script is run. To do this, you would need to get a list of all of the files in the folder, and then use a repeat loop to go through and rename all of them.

As we continue, throughout this article, you will see how repeat loops can be extremely useful in all types of automated processes.

Types of Repeat Loops

There are several different types of repeat loops that can be used in AppleScript.

Repeat

In AppleScript, it is possible to loop indefinitely by using the repeat type of repeat loop, which is written as follows:

repeat
   -- DO SOMETHING
end repeat

Using the above example, the AppleScript code inside of the repeat loop will loop on forever. It will never stop unless an error occurs. You should take care when using this type of repeat loop, as you can sometimes box yourself into a corner with no way to get out. It is always good practice to provide some type of mechanism within your code in order to get yourself out of the repeat loop. This is typically done by using the exit repeat statement.

For example, let's say that you need to display a dialog prompting the user to enter a username. However, you want to make absolutely sure that the user types at least something into the dialog. This can be done with a combination of a repeat type of repeat loop and an exit repeat statement.

repeat
   display dialog "Please enter your username:" default answer ""
   set theUserName to text returned of result
   if theUserName <> "" then exit repeat
end repeat

As you can see in the example code above, the dialog will continue to be displayed until the user enters something into the prompt.

Repeat Times

Another type of repeat loop in AppleScript is the repeat times type of repeat loop, which is used to perform a loop for a specified number of times. For example, let's use the same scenario as above. However, instead of looping forever, let's say that you want to only give the user 3 chances to enter the username before an error will occur.

repeat 3 times
   display dialog "Please enter your name:" default answer ""
   set theUserName to text returned of result
   if theUserName <> "" then exit repeat
end repeat
if theUserName = "" then display dialog "Invalid Entry!!!"

In the example code above, the user will only be prompted to enter the username a maximum of 3 times. If the user does not enter a username, then an error notification will be displayed.

Repeat While

The repeat while style of repeat loop is typically used to test for a specific scenario to occur. For example, we could use the repeat while type of repeat loop as another way to verify that a user enters something into our dialog example.

set theUserName to ""
repeat while theUserName = ""
   display dialog "Please enter your name:" default answer ""
   set theUserName to text returned of result
end repeat

In the example above, the script will continue to loop until something is entered into the dialog. You could also use a repeat loop of this nature to loop until a file is detected in a certain folder. For example:

set theFilePath to (path to desktop as string) & "test.psd"
tell application "Finder"
   repeat while (file theFilePath exists) = false
   end repeat
end tell
display dialog "The Photoshop file has arrived!"

Repeat Until

The repeat until type of repeat loop is yet another type of repeat loop that is used to test for specific scenarios to occur. As you can see in the example code below, this type of repeat loop is very similar to the repeat while type of repeat loop.

set theUserName to ""
repeat until theUserName <> ""
   display dialog "Please enter your name:" default answer ""
   set theUserName to text returned of result
end repeat

Reprat With

The repeat with type of repeat loop can actually be broken down another level, into two separate types of distinct repeat with loops.

The first type of repeat with loop will allow you to loop for a specified number of times, while dynamically incrementing an integer variable's count. This type of repeat with loop is formed as follows:

repeat with theIncrementValue from theStartingValue to theEndingValue
   -- DO SOMETHING
end repeat

In the code above, the variable theIncrementValue signifies the current increment of an integer value in the loop. The variable theStartingValue signifies an integer that should be used as the initial increment value, whereas the variable theEndingValue signifies an integer that should be used as the final increment value. When a repeat loop of this nature is executed, it will continue to loop, incrementing the variable theIncrementValue each time until it reaches the value of the theEndingValue.

Let's take a look at another example in order to help illustrate this process. In the following example, we are going to prompt the user to select a folder, and then loop a specified number of times, building a folder for each increment.

set theDestinationFolder to choose folder
tell application "Finder"
   repeat with theIncrementValue from 1 to 10
      make new folder at theDestinationFolder with properties {name:theIncrementValue as string}
   end repeat
end tell

When executed, the code above will generate 10 folders, named from 1 to 10, in a user specified directory. You can see how using a repeat loop for this type of task can help to make your AppleScript code extremely efficient.

It is also possible to change the manner by which the increment in this type of repeat loop occurs. For example, you may not want to loop by 1's. Instead, you may want to loop by 2's. This can be done by adding an optional by parameter at the end of the initial repeat with statement. For example:

set theDestinationFolder to choose folder
tell application "Finder"
   repeat with theIncrementValue from 1 to 10 by 2
      make new folder at theDestinationFolder with properties {name:theIncrementValue as string}
   end repeat
end tell

In the example above, the script increments by 2's rather than 1's. Therefore, instead of building 10 folders, the script will only build 5, and they will be named "1", "3", "5", "7", and "9".

When using this type of repeat with loop, it is not necessary to begin the loop with a starting increment of 1. For example, the following code will cause 10 folders to be created, named from 11 to 20.

set theDestinationFolder to choose folder
tell application "Finder"
   repeat with theIncrementValue from 11 to 20
      make new folder at theDestinationFolder with properties {name:theIncrementValue as string}
   end repeat
end tell

It is also possible to cause the increment value to move in reverse, such as from 10 to 1. For example:

set theDestinationFolder to choose folder
tell application "Finder"
   repeat with theIncrementValue from 10 to 1 by -1
      make new folder at theDestinationFolder with properties {name:theIncrementValue as string}
   end repeat
end tell

At the beginning of this section, I mentioned that there are actually two types of repeat with loops in AppleScript. The second type of repeat with loop is used to loop through a series of values in a list. It is formed as follows:

repeat with theCurrentValue in theListOfValues
   -- DO SOMETHING
end repeat

When using this type of repeat with loop, each time the code loops, the variable theCurrentValue will take on the value of the current item in the list variable theListOfValues. Let's take a look at this type of loop in action.

set theDestinationFolder to choose folder
set theListOfValues to {"apples", "oranges", "pears"}
tell application "Finder"
   repeat with theCurrentValue in theListOfValues
      make new folder at theDestinationFolder with properties {name:theCurrentValue}
   end repeat
end tell

In the example code above, the script will loop through the list variable theListOfValues, which, in this case, contains the names of three different types of fruit. Each time the code loops, the variable theCurrentValue will take on the current value from the variable theListOfValues. So, during the first loop, the variable theCurrentValue would take on a value of "apples", the second loop, it would take on a value of "oranges", and so forth.

In Closing

Hopefully, the various types of repeat loops specified in this article will be helpful to you as you begin writing more complex AppleScript code. By creating nested repeat loops of varying types, you can really create some complex and adventurous scripts.

If you are interested in learning more about repeat loops in AppleScript, I recommend checking out the AppleScript Language Guide, which can be found under AppleScript in the Developer Connection on Apple's web site - http://developer.apple.com/. You may also want to consider picking up a good introductory AppleScript book, such as Danny Goodman's AppleScript Handbook.

Until next time, keep scripting!


Benjamin Waldie is president of Automated Workflows, LLC, a firm specializing in AppleScript and workflow automation consulting. In addition to his role as a consultant, Benjamin is an evangelist of AppleScript, and can frequently be seen presenting at Macintosh User Groups, Seybold Seminars, and MacWorld. For additional information about Benjamin, please visit http://www.automatedworkflows.com , or email Benjamin at applescriptguru@mac.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple GarageBand 10.1.4 - Complete recor...
The new GarageBand is a whole music creation studio right inside your Mac -- complete with keyboard, synths, orchestral and percussion instruments, presets for guitar and voice, an entirely... Read more
Alfred 3.2.1 - Quick launcher for apps a...
Alfred is an award-winning productivity application for OS X. Alfred saves you time when you search for files online or on your Mac. Be more productive with hotkeys, keywords, and file actions at... Read more
Adobe Lightroom 6.8 - Import, develop, a...
Adobe Lightroom is available as part of Adobe Creative Cloud for as little as $9.99/month bundled with Photoshop CC as part of the photography package. Lightroom 6 is also available for purchase as a... Read more
Backblaze 4.2.0.990 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac. With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more
OmniPlan Pro 3.6 - Professional-grade pr...
With OmniPlan Pro, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success... Read more
OmniPlan 3.6 - Robust project management...
With OmniPlan, you can create logical, manageable project plans with Gantt charts, schedules, summaries, milestones, and critical paths. Break down the tasks needed to make your project a success,... Read more
Little Snitch 3.7.1 - Alerts you about o...
Little Snitch gives you control over your private outgoing data. Track background activity As soon as your computer connects to the Internet, applications often have permission to send any... Read more
iMazing 2.1.3 - Complete iOS device mana...
iMazing (was DiskAid) is the ultimate iOS device manager with capabilities far beyond what iTunes offers. With iMazing and your iOS device (iPhone, iPad, or iPod), you can: Copy music to and from... Read more
AppDelete 4.3.1 - $7.99
AppDelete is an uninstaller that will remove not only applications but also widgets, preference panes, plugins, and screensavers along with their associated files. Without AppDelete these associated... Read more
FileZilla 3.23.0.2 - Fast and reliable F...
FileZilla (ported from Windows) is a fast and reliable FTP client and server with lots of useful features and an intuitive interface. Version 3.23.0.2: Bug Fixes and Minor Changes Speed up icon... Read more

Latest Forum Discussions

See All

Galaxy on Fire 3 and four other fantasti...
Galaxy on Fire 3 - Manticore brings the series back for another round of daring space battles. It's familiar territory for folks who are familiar with the franchise. If you've beaten the game and are looking to broaden your horizons, might we... | Read more »
The best apps for your holiday gift exch...
What's that, you say? You still haven't started your holiday shopping? Don't beat yourself up over it -- a lot of people have been putting it off, too. It's become easier and easier to procrastinate gift shopping thanks to a number of apps that... | Read more »
Toca Hair Salon 3 (Education)
Toca Hair Salon 3 1.0 Device: iOS Universal Category: Education Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Winter comes to Darkwood as Seekers Note...
MyTona, based in the chilly Siberian city of Yakutsk, has brought a little festive fun to its hidden object game Seekers Notes: Hidden Mystery. The Christmas update introduces some new inhabitants to players, and with them a chance to win plenty of... | Read more »
Bully: Anniversary Edition (Games)
Bully: Anniversary Edition 1.03.1 Device: iOS Universal Category: Games Price: $6.99, Version: 1.03.1 (iTunes) Description: *** PLEASE NOTE: This game is officially supported on the following devices: iPhone 5 and newer, iPod Touch... | Read more »
PINE GROVE (Games)
PINE GROVE 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: A pine grove where there are no footsteps of people due to continuous missing cases. The case is still unsolved and nothing has... | Read more »
Niantic teases new Pokémon announcement...
After rumors started swirling yesterday, it turns out there is an official Pokémon GO update on its way. We’ll find out what’s in store for us and our growing Pokémon collections tomorrow during the Starbucks event, but Niantic will be revealing... | Read more »
3 reasons why Nicki Minaj: The Empire is...
Nicki Minaj is as business-savvy as she is musically talented and she’s proved that by launching her own game. Designed by Glu, purveyors of other fine celebrity games like cult favorite Kim Kardashian: Hollywood, Nicki Minaj: The Empire launched... | Read more »
Clash of Clans is getting its own animat...
Riding on its unending wave of fame and success, Clash of Clans is getting an animated web series based on its Clash-A-Rama animated shorts.As opposed to the current shorts' 60 second run time, the new and improved Clash-A-Rama will be comprised of... | Read more »
Leaks hint at Pokémon GO and Starbucks C...
Leaked images from a hub for Starbucks employees suggests that a big Pokémon GO event with the coffee giant could begin this very week. The images appeared on Reddit and hint at some exciting new things to come for Niantic's smash hit game. | Read more »

Price Scanner via MacPrices.net

12-inch Retina MacBooks, Apple refurbished, n...
Apple has restocked a full line of Certified Refurbished 2016 12″ Retina MacBooks, now available for $200-$260 off MSRP. Refurbished 2015 models are available starting at $929. Apple will include a... Read more
Holiday sale: 12-inch Retina MacBook for $100...
B&H has 12″ Retina MacBooks on sale for $100 off MSRP as part of their Holiday sale. Shipping is free, and B&H charges NY sales tax only: - 12″ 1.1GHz Space Gray Retina MacBook: $1199 $100... Read more
Apple refurbished 13-inch MacBook Airs availa...
Apple has Certified Refurbished 13″ MacBook Airs available starting at $849. An Apple one-year warranty is included with each MacBook, and shipping is free: - 13″ 1.6GHz/8GB/128GB MacBook Air: $849 $... Read more
Apple refurbished iMacs available for up to $...
Apple has Certified Refurbished 2015 21″ & 27″ iMacs available for up to $350 off MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: - 21″ 3.... Read more
Apple’s Education discount saves up to $300 o...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free: -... Read more
Back in stock: Apple refurbished Mac minis fr...
Apple has Certified Refurbished Mac minis available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz Mac mini: $419 $80 off MSRP - 2.6GHz Mac... Read more
Twenty-Five Years Of Apple Laptops – A person...
Among many other things, the often tumultuous 16th year of the new century marked the 25th anniversary of Apple laptop computers, not counting the optimistically named 16-pound Mac Portable of 1989.... Read more
Landlordy iOS App Adds Support For Appliances...
Riga, Latvia based E-protect SIA is releasing major update (version 1.8) to its Landlordy app for managing rental business financials on the go. Landlordy is iPhone and iPad app designed for self-... Read more
Holiday sale, Apple iMacs for up to $200 off...
B&H Photo has 21″ and 27″ Apple iMacs on sale for up to $200 off MSRP including free shipping plus NY sales tax only: - 27″ 3.3GHz iMac 5K: $2099 $200 off MSRP - 27″ 3.2GHz/1TB Fusion iMac 5K: $... Read more
Holiday sale: Mac minis for $50 to $100 off M...
B&H Photo has Mac minis on sale for up to $100 off MSRP free shipping plus NY sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP - 2.6GHz Mac mini: $629 $70 off MSRP - 2.8GHz Mac mini: $899 $... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions- Trumbul...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Retail - Multiple Positions- Philade...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions- San Ant...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Products Tester Needed - Apple (Unit...
…we therefore look forward to put out products to quality test for durability. Apple leads the digital music revolution with its iPods and iTunes online store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.