The first thing you could do to improve your script is don’t use shell scripting. Shell scripting is like a jackhammer, but what you are doing only requires the tiniest hand-held hammer.
Here is your original script:
tell application "Finder"
activate
set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
set folderpath to POSIX path of (choose folder with prompt "Select client folder")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Links")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-PDFs")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Supplied")
do shell script "/bin/mkdir -p " & quoted form of folderpath & "/" & quoted form of (jobNum) & "/" & quoted form of (jobNum & "-Versions")
end tell
Compare to a “de-shelled” version, which is easier to read, write, and maintain:
tell application "Finder"
activate
set jobNum to text returned of (display dialog "Enter a job number:" default answer "[JobNumber]-[Description]")
set theClientFolder to (choose folder with prompt "Select client folder")
set theSubFolderNames to {"Links", "PDFs", "Supplied", "Versions"}
repeat with theSubFolderName in theSubFolderNames
make new folder at theClientFolder with properties {name:jobNum & "-" & theSubFolderName}
end repeat
end tell
Notice that the variable “folderpath” has changed to “theClientFolder” because choose folder does not return a path, it returns an alias object for the chosen folder. The command for telling Finder to make a new folder is “make new folder at [alias where you want the folder to be made]” so you don’t need to convert that alias into a path to make new folders inside of it.
Notice also that the names of the folders have been declared as variables in a list, which makes them easier to read or change later. Even somebody who does not know AppleScript could open this script and change the name of the “PDFs” folder to “Documents” or something like that.
Another improvement I could suggest would be to make the way that you’re gathering the input from the user a little more sophisticated. You seem to be asking for 2 items of information other than the client folder — job number and job description — so use 2 dialog boxes, because that will be easier for the user and less error-prone because you can give 2 actual examples of what you want them to input. You can also improve the appearance of those dialogs in a few ways. And you can add a little error handling — if the user cancels the dialogs you’re presenting, that generates errors. You can handle them gracefully by checking if the user clicked “OK” or not.
Here is a version of your script with the user input cleaned up a bit:
tell application "Finder"
activate
display dialog "Enter a job number:" default answer "100" buttons {"Cancel", "OK"} default button "OK" with title (the name as text) with icon note giving up after 180
if the button returned of the result is equal to "OK" then
set theJobNumber to the text returned of the result
display dialog "Enter a job description:" default answer "Photos" buttons {"Cancel", "OK"} default button "OK" with title (the name as text) with icon note giving up after 180
if the button returned of the result is equal to "OK" then
set theJobDescription to the text returned of the result
try
choose folder with prompt "Select client folder:" default location (the path to the desktop folder as alias) without multiple selections allowed, invisibles and showing package contents
set theClientFolder to the result
on error
set theClientFolder to ""
end try
if theClientFolder is not equal to "" then
set theSubFolderNames to {"Links", "PDFs", "Supplied", "Versions"}
repeat with theSubFolderName in theSubFolderNames
make new folder at theClientFolder with properties {name:theJobNumber & "-" & theJobDescription & "-" & theSubFolderName}
end repeat
end if
end if
end if
end tell
This will give you dialog boxes that say “Finder” at the top and include the Finder icon, which will give up after 180 seconds (to prevent at timeout error) and which, if the user presses “Cancel” at any point, will just die gracefully without generating any errors. You can tweak the default answers for the input dialogs so that they help the user put in the right input, for example, if job numbers are 4 digits, put a 4 digit number here. And the choose folder prompt will start by showing the Desktop — you can change that to another location if there is a disk or folder where you store all your client folders:
choose folder with prompt "Select client folder:" default location (disk "Clients" as alias) …
To be clear, shell scripting is awesome, but I recommend you only use “do shell script” to get at unique features of the UNIX layer, like PHP functions, Perl regex, and so on. Anything that is already available to you in the Mac layer is going to be easier and safer to use, and easier to read, write, and maintain in AppleScript. Especially really basic things like creating folders.