I found out that python substrings act differently than I thought. So I changed this line in the code below and it should now work. if field.name[1:3] == "ID_":to if field.name[1:4] == "ID_":The first version I gave only got "ID" from the field name. The correction will get "ID_".################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # A counter to separate the first time through the loop from all other times counter = 0 # Loop through every item in the list that was just generated for fc in fcs: if counter == 0: # set up first Layer for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") else: # set up second and following Layers for AddJoin gp.AddJoin_management("source_lyr", "A_grid.GID", fc, "GID", "KEEP_ALL") counter += 1 # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) fieldList = gp.ListFields(out_shape) for field in fieldList: if field.name[1:4] == "ID_": gp.deletefield (out_shape, field.name) # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()