Fair enough. I removed the notes to make it less compact so I could read it easier, I didn’t realise they were there to help.
I’m still learning the code so I am constantly breaking down the code and trying to build it back up again so I understand it.
All in all, thank you for your help. The scripts work perfect and they allow me to create client folders with ease so they all look and feel the same as each other. The second script then does the same for my projects folders.
It might be overkill but I like everything looking the same and if I can create folders with a single touch then it’s a step in the right direction.
Here are the full working scripts
Both these scripts are added to my toolbar in Finder.
Script 1: This creates a new client folder in: Users/User/Documents/Clients and add the 6 digit code.
Script 2: This creates a new project but you must be in the project file for it to work
--> New Client
--> VERSION 3
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
--> Needed for Git
set UserEmail to quoted form of "name@email.co.uk"
set UserName to quoted form of "Full Name"
--> Physical URL Path of the Client Template Folder
set ClientTemplatePath to quoted form of POSIX path of "Volumes:GoogleDrive:My Drive:Work:Resources:Templates:OS Folders:Client Template:"
--> Physical URL Path of the Project Template Folder
set ProjectTemplatePath to quoted form of POSIX path of "Volumes:GoogleDrive:My Drive:Work:Resources:Templates:OS Folders:Project Template:"
--> Physical URL Path of the Client Archived Folder
set ClientsArchivedPath to "Google Drive:My Drive:Work:Clients (Archived):"
--> Physical URL Path of the Local Client Folder
set ClientsDestinationPath to "Macintosh HD:Users:user:Documents:Clients:"
--> Get Current Folder Path (CurrentPath) and Name (CurrentFolder)
tell application "Finder"
if exists Finder window 1 then
set CurrentDir to target of Finder window 1 as string
else
set CurrentDir to (desktop as string)
end if
--> Get Current Folder path
set CurrentPath to POSIX path of (CurrentDir)
end tell
set ClientNamePrompt to text returned of (display dialog "Please enter your Clients Business Name:" default answer "" buttons {"Cancel", "Create"} default button "Create" cancel button "Cancel") --> "the theorem of : ƒPythagoras # / the €"
set CapitalizedText to ((current application's NSString's stringWithString:ClientNamePrompt)'s capitalizedString()) as string --> "THE THEOREM OF : ƒPYTHAGORAS # / THE €"
--> Word Exraction
set allWords to words of CapitalizedText --> {"THE", "THEOREM", "OF", "ƒPYTHAGORAS", "THE", "€"}
set someWords to {}
set theText to ""
repeat with aWord in allWords
set aWord to aWord as string
if aWord is "THE" then
set theText to aWord
else
set end of someWords to aWord
end if
end repeat
someWords --> {"THEOREM", "OF", "ƒPYTHAGORAS", "€"}
set CompiledName to my recolle(someWords, space) --> "THEOREM OF ƒPYTHAGORAS €"
if theText ≠ "" then set CompiledName to CompiledName & ", " & theText --> "THEOREM OF ƒPYTHAGORAS €, THE"
--> Start of the cleaning process and creation of the client folder
set BaseName to "(" & my cleanTheText(CompiledName)
tell application "System Events"
set maybe to (name of every folder of folder ClientsDestinationPath whose name contains BaseName) & (name of every folder of folder ClientsArchivedPath whose name contains BaseName)
set fullNameIncCode to CompiledName & space & BaseName & text -2 thru -1 of ((101 + (count maybe)) as string) & ")"
tell application "Finder"
set dnnn to quoted form of POSIX path of (ClientsDestinationPath & fullNameIncCode)
end tell
if exists (name of every folder of folder ClientsDestinationPath whose name contains CompiledName) then
display dialog "That client already exists in Clients (Local)" buttons {"OK"} default button "OK" with icon caution --or use icon stop
else if exists (name of every folder of folder ClientsArchivedPath whose name contains CompiledName) then
display dialog "That client already exists in Clients (Archived)" buttons {"OK"} default button "OK" with icon caution --or use icon stop
else
tell me to do shell script "cp -R " & ClientTemplatePath & space & dnnn
display notification "Client created in Clients (Local)"
end if
end tell
on recolle(l, d)
local oTIDs, t
set {oTIDs, AppleScript's text item delimiters} to {AppleScript's text item delimiters, d}
set t to l as text
set AppleScript's text item delimiters to oTIDs
return t
end recolle
--> Removes the special characters from ClientNamePrompt
on cleanTheText(theText)
-- handler designed by Shane Stanley
set aString to current application's NSString's stringWithString:theText
if aString's hasPrefix:"The " then set aString to aString's substringFromIndex:4
set aString to aString's stringByApplyingTransform:"Any-Latin; ASCII; Upper; [^A-Z0-9] Remove" |reverse|:false
try -- errors if string too short
return text 1 thru 4 of (aString as text)
on error
display dialog "The Client Name does not contain four characters." buttons {"OK"} cancel button 1 default button 1 with icon stop
end try
end cleanTheText
--> New Project
--> VERSION 5
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
--> Needed for Git
set UserEmail to quoted form of "name@email.co.uk"
set UserName to quoted form of "Full Name"
--> Physical URL Path of the Client Template Folder
set ClientTemplatePath to quoted form of POSIX path of "Volumes:GoogleDrive:My Drive:Work:Resources:Templates:OS Folders:Client Template:"
--> Physical URL Path of the Project Template Folder
set ProjectTemplatePath to quoted form of POSIX path of "Volumes:GoogleDrive:My Drive:Work:Resources:Templates:OS Folders:Project Template:"
--> Physical URL Path of the Client Archived Folder
set ClientsArchivedPath to "Google Drive:My Drive:Work:Clients (Archived):"
--> Physical URL Path of the Local Client Folder
set ClientsDestinationPath to "Macintosh HD:Users:user:Documents:Clients:"
--The name of the folder where you're keeping your projects
set ProjectsFolderName to "Projects"
--The name of the folder where you're keeping your Website Code
set CodeFolderName to "Code"
--> Get Current Folder Path (CurrentPath) and Name (CurrentFolder)
tell application "Finder"
if exists Finder window 1 then
set CurrentDir to target of Finder window 1 as string
else
set CurrentDir to (desktop as string)
end if
--> Get Current Folder path
set CurrentPath to POSIX path of (CurrentDir)
end tell
--> Get Current Paths folder name
set CurrentPathName to my CurrentPathExtraction(CurrentPath)
on CurrentPathExtraction(CurrentObject)
tell application "System Events"
return name of disk item (path of disk item (CurrentObject as text))
end tell
end CurrentPathExtraction
if CurrentPathName = "Projects" then
set ProjectNamePrompt to text returned of (display dialog "Please enter your Project Name:" default answer "" buttons {"Cancel", "Create"} default button "Create" cancel button "Cancel") --> "Project name"
set CapitalizedText to ((current application's NSString's stringWithString:ProjectNamePrompt)'s uppercaseString()) as string --> "THE THEOREM OF : ƒPYTHAGORAS # / THE €"
--> Word Exraction
set ProjectallWords to words of CapitalizedText --> {"THE", "THEOREM", "OF", "ƒPYTHAGORAS", "THE", "€"}
set ProjectsomeWords to {}
set ProjecttheText to ""
repeat with ProjectaWord in ProjectallWords
set ProjectaWord to ProjectaWord as string
if ProjectaWord is "THE" then
set ProjecttheText to ProjectaWord
else
set end of ProjectsomeWords to ProjectaWord
end if
end repeat
ProjectsomeWords --> {"THEOREM", "OF", "ƒPYTHAGORAS", "€"}
set ProjectCompiledName to my recolle(ProjectsomeWords, space) --> "THEOREM OF ƒPYTHAGORAS €"
if ProjecttheText ≠ "" then set ProjectCompiledName to ProjectCompiledName & ", " & ProjecttheText --> "THEOREM OF ƒPYTHAGORAS €, THE"
--> Get 4 digit code from parent folder
set ParentPathName to my ParentPathExtraction(CurrentPath)
--> Word Exraction
set ParentallWords to words of ParentPathName --> {"THE", "THEOREM", "OF", "ƒPYTHAGORAS", "THE", "€"}
set ParentsomeWords to {}
set ParenttheText to ""
repeat with ParentaWord in ParentallWords
set ParentaWord to ParentaWord as string
if ParentaWord is "THE" then
set ParenttheText to ParentaWord
else
set end of ParentsomeWords to ParentaWord
end if
end repeat
ParentsomeWords --> {"THEOREM", "OF", "ƒPYTHAGORAS", "€"}
set ParentCompiledName to my recolle(ParentsomeWords, space) --> "THEOREM OF ƒPYTHAGORAS €"
if ParenttheText ≠ "" then set ParentCompiledName to ParentCompiledName & ", " & ParenttheText --> "THEOREM OF ƒPYTHAGORAS €, THE"
set ParentPathName to "blah( az (AZER01) tagada (QWER01) (truc)"
-- define the pattern used by the regular expression
set pattern to "\\(([A-Z]{4}[0-9]{2})\\)" -- was "\\(([^(]{6})\\)"
-- build the regular expression
set regex to (current application's NSRegularExpression's regularExpressionWithPattern:pattern options:0 |error|:(missing value))
-- call the regex to search the substring mathching the given pattern
set matches to (regex's matchesInString:ParentPathName options:0 range:{location:0, |length|:(count ParentPathName)})
-- matches is an object which can't be used directly by AppleScript
-- convert the AppleScript string object into an NSString which is the official class used by ASObjC
set cocoaString to (current application's NSString's stringWithString:ParentPathName)
repeat with aMatch in matches
-- extract the Applescript's substrings
set baseName to (cocoaString's substringWithRange:(aMatch's range())) as string
log baseName
(*(AZER01)*)
(*(QWER01)*)
end repeat
baseName --> "(QWER01)"
tell application "System Events"
set maybe to name of every folder of folder CurrentPath
set FolderCount to text -4 thru -1 of ((10001 + (count maybe)) as string)
tell application "Finder"
set ProjectFolderPath to quoted form of POSIX path of (CurrentPath & baseName & "-" & FolderCount & ", " & ProjectCompiledName)
set ProjectFolderName to quoted form of (baseName & "-" & FolderCount & ", " & ProjectCompiledName)
end tell
tell me to do shell script "cp -R " & ProjectTemplatePath & space & ProjectFolderPath
display notification "Project Created in " & ParentPathName
end tell
-- GET CODE FOLDER PATH
set CodeDestinationPath to quoted form of (CurrentPath & baseName & "-" & FolderCount & ", " & ProjectCompiledName & "/" & CodeFolderName)
--display dialog CodeDestinationPath
ProjectCompiledName
-- INITIALISE GIT
do shell script "cd " & ¬
CodeDestinationPath & ¬
space & ¬
"&& git init" & ¬
space & ¬
"&& git config --global user.email " & ¬
UserEmail & ¬
space & ¬
"&& git config --global user.name " & ¬
UserName & ¬
space & ¬
"&& git add ." & ¬
space & ¬
"&& git commit -m 'Initial commit. Added the code file for" & " " & ¬
ParentPathName & " and the " & ¬
ProjectCompiledName & "project." & "'"
else
display dialog "Open your Clients 'Projects' folder first" buttons {"OK"} default button "OK" with icon caution --or use icon stop
end if
on ParentPathExtraction(ParentObject)
tell application "System Events"
return name of container of disk item (path of disk item (ParentObject as text))
end tell
end ParentPathExtraction
on recolle(l, d)
local oTIDs, t
set {oTIDs, AppleScript's text item delimiters} to {AppleScript's text item delimiters, d}
set t to l as text
set AppleScript's text item delimiters to oTIDs
return t
end recolle
on decoupe(t, d)
local oTIDs, l
set {oTIDs, AppleScript's text item delimiters} to {AppleScript's text item delimiters, d}
set l to text items of t
set AppleScript's text item delimiters to oTIDs
return l
end decoupe
--> Removes the special characters from ClientNamePrompt
on cleanTheText(ProjecttheText)
-- handler designed by Shane Stanley
set aString to current application's NSString's stringWithString:ProjecttheText
if aString's hasPrefix:"The " then set aString to aString's substringFromIndex:4
set aString to aString's stringByApplyingTransform:"Any-Latin; ASCII; Upper; [^A-Z0-9] Remove" |reverse|:false
try -- errors if string too short
return text 1 thru 4 of (aString as text)
on error
display dialog "The Client Name does not contain four characters." buttons {"OK"} cancel button 1 default button 1 with icon stop
end try
end cleanTheText