Folder creating script, unable to modify subfolder commands

Hello
I am trying to alter a script we have been using for my office for about 15 years(!) to create folder trees for new projects.I thought i knew how to alter it …but am having trouble with correct end command when trying to remove subfolders within a folder higher up. Here is an example:

property folder_structure : {base_folder:"#", subfolders:{¬ {base_folder:"#_ADMINISTRATION", subfolders:{¬ {base_folder:"#_01 Project Directory", subfolders[color=#FF0000]:{}},[/color] {base_folder:"#_02 Contracts", subfolders:{¬ {base_folder:"#_03 Design Administration", subfolders:{¬ [color=blue]{base_folder:"# PM-01 Corr & Mtg Notes", subfolders:{}}, {base_folder:"# PM-02 Client Phase Appr", subfolders:{}}, {base_folder:"# PM-03 Budgets", subfolders:{}}, {base_folder:"# PM-04 Programming Info", subfolders:{}}, {base_folder:"# PM-05 Ex Cond, Survey, etc", subfolders:{}}, {base_folder:"# PM-06 Area Calculations", subfolders:{}}, {base_folder:"# PM-07 Schedule-Goals", subfolders:{}}, {base_folder:"# PM-08 Pre. Projec Desc", subfolders:{}}, {base_folder:"# PM-09 Interoffice memo", subfolders:{}}, {base_folder:"# PM-10 Drawings-Cartoon", subfolders:{}}, {base_folder:"# PM-11 Reg. Agency Reqs", subfolders:{}}, {base_folder:"# PM-12 Transmittals", subfolders:{}}, {base_folder:"# PM-13 Design Notes", subfolders:{}}, {base_folder:"# PM-14 Project Manual", subfolders:{}}, {base_folder:"# PM-15 Utilities", subfolders:{}}}}, ¬ {base_folder:"#_4 Contract Admin", subfolders:{¬ {base_folder:"# CA-01 Corr & Mtg Notes", subfolders:{}}, {base_folder:"# CA-02 Bidding-Negotiating", subfolders:{}}, {base_folder:"# CA-03 RFI-SK", subfolders:{}}, {base_folder:"# CA-04 Meeting Notes", subfolders:{}}, {base_folder:"# CA-05 Change Orders", subfolders:{}}, {base_folder:"# CA-06 App for Payment", subfolders:{}}, {base_folder:"# CA-07 Field Reports", subfolders:{}}, {base_folder:"# CA-08 Punchlist-Closeout", subfolders:{}}, {base_folder:"# CA-09 Cons Field Report", subfolders:{}}, {base_folder:"# CA-10 Shp Drawings", subfolders:{}}, {base_folder:"# CA-11 Photographs", subfolders:{}}, {base_folder:"# CA-12 Job History-Summary", subfolders:{}}, {base_folder:"# CA-13 Arch Supp Instruct", subfolders:{}}, {base_folder:"# CA-14 Addendum", subfolders:{}}, {base_folder:"# CA-15 Permits-Approv copy", subfolders:{}}, {base_folder:"# CA-16 Contractors", subfolders:{}}}}, ¬[/color]

I removed subfolders from both “project Directory” and “contracts” but can’t seem to get the right command at the end of “project directory” and keep getting syntax error”Expected expression but found end of line.” I’ve highlighted in red what i thought was the right command but it doesn’t work. I intend to remove/edit the farthest in subfolders for many more higher up folders(highlighted in blue here).

I don’t use this very often, but thought this would be easy to do, so any tips greatly appreciated to resolve what im guessing is a simple solution.

thanks.

Model: macbook pro
AppleScript: 2.7
Browser: Firefox 66.0
Operating System: macOS 10.14

Hi. Welcome to MacScripter.

As KniazidisR says, it’s very difficult to edit a large nested record-and-list structure like yours because the end braces can be some distance from the opening braces they’re supposed to match.

It’s also difficult for anyone else to fix the problem without knowing what the folder structure’s supposed to be! But to judge from the naming conventions, you have a project folder containing an “#_ADMINISTRATION” folder, which in turn contains four subfolders. Two of these subfolders start out empty, while the other two have their own, empty subfolders.

It’s probably easiest to have a series of properties to build your structure from the bottom up. This makes it easier to keep track of closing braces and makes the structure easier to edit in the future. The way the properties are arranged below, the entire structure is assembled when the script’s compiled, so the script doesn’t need to do anything different when it runs.

-- Subfolder structures for the four subfolders of the "#_ADMINSTRATION" subfolder.
property ProjectDirectory_subfolders : {}
property Contracts_subfolders : {}
property DesignAdministration_subfolders : {¬
	{base_folder:"# PM-01 Corr & Mtg Notes", subfolders:{}}, ¬
	{base_folder:"# PM-02 Client Phase Appr", subfolders:{}}, ¬
	{base_folder:"# PM-03 Budgets", subfolders:{}}, ¬
	{base_folder:"# PM-04 Programming Info", subfolders:{}}, ¬
	{base_folder:"# PM-05 Ex Cond, Survey, etc", subfolders:{}}, ¬
	{base_folder:"# PM-06 Area Calculations", subfolders:{}}, ¬
	{base_folder:"# PM-07 Schedule-Goals", subfolders:{}}, ¬
	{base_folder:"# PM-08 Pre. Projec Desc", subfolders:{}}, ¬
	{base_folder:"# PM-09 Interoffice memo", subfolders:{}}, ¬
	{base_folder:"# PM-10 Drawings-Cartoon", subfolders:{}}, ¬
	{base_folder:"# PM-11 Reg. Agency Reqs", subfolders:{}}, ¬
	{base_folder:"# PM-12 Transmittals", subfolders:{}}, ¬
	{base_folder:"# PM-13 Design Notes", subfolders:{}}, ¬
	{base_folder:"# PM-14 Project Manual", subfolders:{}}, ¬
	{base_folder:"# PM-15 Utilities", subfolders:{}} ¬
		}
property ContractAdmin_subfolders : {¬
	{base_folder:"# CA-01 Corr & Mtg Notes", subfolders:{}}, ¬
	{base_folder:"# CA-02 Bidding-Negotiating", subfolders:{}}, ¬
	{base_folder:"# CA-03 RFI-SK", subfolders:{}}, ¬
	{base_folder:"# CA-04 Meeting Notes", subfolders:{}}, ¬
	{base_folder:"# CA-05 Change Orders", subfolders:{}}, ¬
	{base_folder:"# CA-06 App for Payment", subfolders:{}}, ¬
	{base_folder:"# CA-07 Field Reports", subfolders:{}}, ¬
	{base_folder:"# CA-08 Punchlist-Closeout", subfolders:{}}, ¬
	{base_folder:"# CA-09 Cons Field Report", subfolders:{}}, ¬
	{base_folder:"# CA-10 Shp Drawings", subfolders:{}}, ¬
	{base_folder:"# CA-11 Photographs", subfolders:{}}, ¬
	{base_folder:"# CA-12 Job History-Summary", subfolders:{}}, ¬
	{base_folder:"# CA-13 Arch Supp Instruct", subfolders:{}}, ¬
	{base_folder:"# CA-14 Addendum", subfolders:{}}, ¬
	{base_folder:"# CA-15 Permits-Approv copy", subfolders:{}}, ¬
	{base_folder:"# CA-16 Contractors", subfolders:{}} ¬
		}

-- The subfolder structure for the "#_ADMINSTRATION" subfolder.
property Administration_subfolders : {¬
	{base_folder:"#_01 Project Directory", subfolders:ProjectDirectory_subfolders}, ¬
	{base_folder:"#_02 Contracts", subfolders:Contracts_subfolders}, ¬
	{base_folder:"#_03 Design Administration", subfolders:DesignAdministration_subfolders}, ¬
	{base_folder:"#_4 Contract Admin", subfolders:ContractAdmin_subfolders} ¬
		}

-- The complete project folder structure.
property folder_structure : {base_folder:"#", subfolders:{¬
	{base_folder:"#_ADMINISTRATION", subfolders:Administration_subfolders} ¬
		}}

thanks i’ll give these recommendations a go.
I authored this script way back in 2000 and have subsequently never scripted again, but enjoy new challenges from my day job!
…here’s the full script of the folder structures if that illuminates any further what the end result should look like. Going in to do spring cleaning and remove most of lower sub folders at lowest level to stream line the file structure.

[code]property project_number : “00000”
–use the following structure to create your folders; “#” will be replaced with the project number you enter
–you can extend this structure as deep as you’d like
property folder_structure : {base_folder:“#”, subfolders:{¬
{base_folder:“#_ADMINISTRATION”, subfolders:{¬
{base_folder:“#_01 Project Directory”, subfolders:{}},
{base_folder:“#_02 Contracts”, subfolders:{¬
{base_folder:“#_03 Design Administration”, subfolders:{¬
{base_folder:“# PM-01 Corr & Mtg Notes”, subfolders:{}}, {base_folder:“# PM-02 Client Phase Appr”, subfolders:{}}, {base_folder:“# PM-03 Budgets”, subfolders:{}}, {base_folder:“# PM-04 Programming Info”, subfolders:{}}, {base_folder:“# PM-05 Ex Cond, Survey, etc”, subfolders:{}}, {base_folder:“# PM-06 Area Calculations”, subfolders:{}}, {base_folder:“# PM-07 Schedule-Goals”, subfolders:{}}, {base_folder:“# PM-08 Pre. Projec Desc”, subfolders:{}}, {base_folder:“# PM-09 Interoffice memo”, subfolders:{}}, {base_folder:“# PM-10 Drawings-Cartoon”, subfolders:{}}, {base_folder:“# PM-11 Reg. Agency Reqs”, subfolders:{}}, {base_folder:“# PM-12 Transmittals”, subfolders:{}}, {base_folder:“# PM-13 Design Notes”, subfolders:{}}, {base_folder:“# PM-14 Project Manual”, subfolders:{}}, {base_folder:“# PM-15 Utilities”, subfolders:{}}}}, ¬
{base_folder:“#_4 Contract Admin”, subfolders:{¬
{base_folder:“# CA-01 Corr & Mtg Notes”, subfolders:{}}, {base_folder:“# CA-02 Bidding-Negotiating”, subfolders:{}}, {base_folder:“# CA-03 RFI-SK”, subfolders:{}}, {base_folder:“# CA-04 Meeting Notes”, subfolders:{}}, {base_folder:“# CA-05 Change Orders”, subfolders:{}}, {base_folder:“# CA-06 App for Payment”, subfolders:{}}, {base_folder:“# CA-07 Field Reports”, subfolders:{}}, {base_folder:“# CA-08 Punchlist-Closeout”, subfolders:{}}, {base_folder:“# CA-09 Cons Field Report”, subfolders:{}}, {base_folder:“# CA-10 Shp Drawings”, subfolders:{}}, {base_folder:“# CA-11 Photographs”, subfolders:{}}, {base_folder:“# CA-12 Job History-Summary”, subfolders:{}}, {base_folder:“# CA-13 Arch Supp Instruct”, subfolders:{}}, {base_folder:“# CA-14 Addendum”, subfolders:{}}, {base_folder:“# CA-15 Permits-Approv copy”, subfolders:{}}, {base_folder:“# CA-16 Contractors”, subfolders:{}}}}, ¬
{base_folder:“#_5 Consultants”, subfolders:{¬
{base_folder:“# CN-01 Accoustical”, subfolders:{}}, {base_folder:“# CN-02 Structural”, subfolders:{}}, {base_folder:“# CN-03 Associate”, subfolders:{}}, {base_folder:“# CN-04 Exterior Enclosure”, subfolders:{}}, {base_folder:“# CN-05 Graphics”, subfolders:{}}, {base_folder:“# CN-06 Hardware”, subfolders:{}}, {base_folder:“# CN-07 Lighting”, subfolders:{}}, {base_folder:“# CN-08 Furniture”, subfolders:{}}, {base_folder:“# CN-09 Telecommunication”, subfolders:{}}, {base_folder:“# CN-10 Testing Agency”, subfolders:{}}, {base_folder:“# CN-11 Environmental”, subfolders:{}}, {base_folder:“# CN-12 Soils”, subfolders:{}}, {base_folder:“# CN-13 Civil”, subfolders:{}}, {base_folder:“# CN-14 Electrical”, subfolders:{}}, {base_folder:“# CN-15 Elevators”, subfolders:{}}, {base_folder:“# CN-16 Interiors”, subfolders:{}}, {base_folder:“# CN-17 Audio-Visual”, subfolders:{}}, {base_folder:“# CN-18 Equipment”, subfolders:{}}, {base_folder:“# CN-19 Landplanning-Landscaping”, subfolders:{}}, {base_folder:“# CN-20 Life Safety”, subfolders:{}}, {base_folder:“# CN-21 Mechanical”, subfolders:{}}, {base_folder:“# CN-22 Plumbing”, subfolders:{}}, {base_folder:“# CN-23 Security”, subfolders:{}}, {base_folder:“# CN-24 Surveys”, subfolders:{}}}}, ¬
{base_folder:“#_6 Specifications-Info”, subfolders:{¬
{base_folder:“# SP-01 Accoustical”, subfolders:{}}, {base_folder:“# SP-02 Art”, subfolders:{}}, {base_folder:“# SP-03 Audio-Visual”, subfolders:{}}, {base_folder:“# SP-04 Civil”, subfolders:{}}, {base_folder:“# SP-05 Electrical”, subfolders:{}}, {base_folder:“# SP-06 Equipment”, subfolders:{}}, {base_folder:“# SP-07 Exterior Enclosure”, subfolders:{}}, {base_folder:“# SP-08 Finish Materials”, subfolders:{}}, {base_folder:“# SP-09 Food Services”, subfolders:{}}, {base_folder:“# SP-10 Fountains”, subfolders:{}}, {base_folder:“# SP-11 Furniture”, subfolders:{}}, {base_folder:“# SP-12 Graphics”, subfolders:{}}, {base_folder:“# SP-13 Hardware”, subfolders:{}}, {base_folder:“# SP-14 Electrical”, subfolders:{}}, {base_folder:“# SP-15 Elevators”, subfolders:{}}, {base_folder:“# SP-16 Landscape”, subfolders:{}}, {base_folder:“# SP-17 Mechanical”, subfolders:{}}, {base_folder:“# SP-18 Parking-Traffic”, subfolders:{}}, {base_folder:“# SP-19 Plumbing”, subfolders:{}}, {base_folder:“# SP-20 Security”, subfolders:{}}, {base_folder:“# SP-21 Telecommunications”, subfolders:{}}, {base_folder:“# SP-22 Vertical Transport”, subfolders:{}}}}}}, ¬
{base_folder:“#_DESIGN”, subfolders:{¬
{base_folder:“#_CAD_0 Existing Conditions”, subfolders:{¬
{base_folder:“# RS-01 As Builts”, subfolders:{}}, {base_folder:“# RS-02 Design”, subfolders:{}}, {base_folder:“# RS-03 Con Doc”, subfolders:{}}, {base_folder:“# RS-04 Permit”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_1 Design”, subfolders:{¬
{base_folder:“# MP-01 CAD”, subfolders:{}}, {base_folder:“# MP-02 Process”, subfolders:{}}, {base_folder:“# MP-03 Reference”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_3 Regulatory”, subfolders:{¬
{base_folder:“# SD-01 CAD”, subfolders:{}}, {base_folder:“# SD-02 Process”, subfolders:{}}, {base_folder:“# SD-03 Reference-Consultants”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_4 Construction Documents”, subfolders:{¬
{base_folder:“# CD-01 CAD”, subfolders:{}}, {base_folder:“# CD-02 Process”, subfolders:{}}, {base_folder:“# CD-03 Reference”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_5 Addenda_RFI”, subfolders:{¬
{base_folder:“# AD-01 CAD”, subfolders:{}}, {base_folder:“# AD-02 Process”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_6 Record Sets”, subfolders:{¬
{base_folder:“# RA-01 CAD”, subfolders:{}}, {base_folder:“# RA-02 Process”, subfolders:{}}}}, ¬
{base_folder:“#_CAD_7 Image-Presentations”, subfolders:{¬
{base_folder:“# IP-01 Presentations”, subfolders:{}}, {base_folder:“# IP-02 Images”, subfolders:{}}, {base_folder:“# IP-03 Models”, subfolders:{}}}}} ¬
}}}
set desktop_path to (path to desktop) as Unicode text
tell application “Finder”
activate
set project_number to text returned of (display dialog “Enter the project number:” default answer project_number buttons {“Cancel”, “OK”} default button 2 with icon 1)
set base_folder_name to my snr(folder_structure’s base_folder, “#”, project_number)
if folder (desktop_path & base_folder_name) exists then
beep
return (display dialog “A folder for project " & project_number & " already exists on the desktop. Please try a new project number.” buttons {“OK”} default button 1 with icon 2 giving up after 10)
end if
set base_folder to (make new folder at desktop with properties {name:base_folder_name}) as alias
my make_subfolders(base_folder, folder_structure’s subfolders)
end tell
beep

on make_subfolders(base_folder, subfolders)
repeat with i in subfolders
set base_folder_name to my snr(i’s base_folder, “#”, project_number)
tell application “Finder” to set new_folder to (make new folder at base_folder with properties {name:base_folder_name}) as alias
try
my make_subfolders(new_folder, i’s subfolders)
end try
end repeat
end make_subfolders

on snr(the_string, search_string, replace_string)
tell (a reference to my text item delimiters)
set {old_tid, contents} to {contents, search_string}
set {the_string, contents} to {the_string’s text items, replace_string}
set {the_string, contents} to {the_string as Unicode text, old_tid}
end tell
return the_string
end snr[/code]

Here is the actual folder structure we are trying to script, its 3 levels deep from main folder:

11141_PROJECT

11141_ADMINISTRATION
11141 01 Project Directory
11141 02 Contracts
11141 03 Design Administration
11141 04 Construction Administration
11141 CA-01 Bidding_Negotiating
11141 CA-02 Schedule
11141 CA-03 Budgets
11141 CA-04 Meeting Notes
11141 CA-05 RFI
11141 CA-06 Contractor Change Orders
11141 CA-07 Shop Drawings
11141 CA-08 App for Payment
11141 CA-09 Change Orders
11141 CA-10 Punchlist-Closeout
11141 CA-11 SIte Photographs
11141 04 Specifications
11141 05 Consultants

11141_DESIGN
11141 01 Existing Conditions
11141 02 Design
11141 03 Regulatory
11141 04 Construction Documents
11141 05 Addenda_RFI
11141 06 Images_Presentations
11141 07 Record Sets

regards.

OK. I hope you’ve been able to work out that in this case, the property scheme I was suggesting would look something like:

-- Subfolders of PROJECT/ADMINISTRATION/Construction Administration.
property ConstructionAdministration_subfolders : {¬
	{base_folder:"# CA-01 Bidding_Negotiation", subfolders:{}}, ¬
	{base_folder:"# CA-02 Scheduler", subfolders:{}}, ¬
	{base_folder:"# CA-03 Budgets", subfolders:{}}, ¬
	{base_folder:"# CA-04 Meeting Notes", subfolders:{}}, ¬
	{base_folder:"# CA-05 RFI", subfolders:{}}, ¬
	{base_folder:"# CA-06 Contractor Change Orders", subfolders:{}}, ¬
	{base_folder:"# CA-07 Shop Drawings", subfolders:{}}, ¬
	{base_folder:"# CA-08 App for Payment", subfolders:{}}, ¬
	{base_folder:"# CA-09 Change Orders", subfolders:{}}, ¬
	{base_folder:"# CA-10 Punchlist-Closeout", subfolders:{}}, ¬
	{base_folder:"# CA-11 Site Photographs", subfolders:{}} ¬
		}
-- Subfolders of PROJECT/ADMINISTRATION.
property Administration_subfolders : {¬
	{base_folder:"# 01 Project Directory", subfolders:{}}, ¬
	{base_folder:"# 02 Contracts", subfolders:{}}, ¬
	{base_folder:"# 03 Design Adminstration", subfolders:{}}, ¬
	{base_folder:"# 04 Construction Administration", subfolders:ConstructionAdministration_subfolders}, ¬
	{base_folder:"# 05 Specifications", subfolders:{}}, ¬
	{base_folder:"# 06 Consultants", subfolders:{}} ¬
		}
-- Subfolders of PROJECT/DESIGN.
property Design_subfolders : {¬
	{base_folder:"# 01 Existing Conditions", subfolders:{}}, ¬
	{base_folder:"# 02 Design", subfolders:{}}, ¬
	{base_folder:"# 03 Regulatory", subfolders:{}}, ¬
	{base_folder:"# 04 Construction Documents", subfolders:{}}, ¬
	{base_folder:"# 05 Addenda_RFI", subfolders:{}}, ¬
	{base_folder:"# 06 Images_Presentations", subfolders:{}}, ¬
	{base_folder:"# 07 Record Sets", subfolders:{}} ¬
		}
		
-- Full folder hierarchy.
property folder_structure : {base_folder:"#_PROJECT", subfolders:{¬
	{base_folder:"#_ADMINISTRATION", subfolders:Administration_subfolders}, ¬
	{base_folder:"#_DESIGN", subfolders:Design_subfolders} ¬
		}}

You have two “04” folders in your “ADMINISTRATION” listing, so I’ve presumed to bump the last two numbers in that folder up by one.

The rest of your script is very 2000s ( :wink: ), but still works.

By the way, MacScripter currently has [applescript] and [/applescript] tags for use with AppleScript code instead of the more usual [code] and [/code]. They make the code appear in a box as above with a clickable link.

Worked like a dream. thanks. I might have to make more scripts before another 20 years goes by.