# Author: ESRI# Date: July 5, 2010# Version: ArcGIS 10.0# Purpose: This script will iterate through each MXD in a folder and report information about each# map document, it's data frames and layers. The script is intended to run from a script# tool that requires two input parameters:# 1) folder containing MXDs,# 2) an output text file.## The resulting text file will automatically open.import arcpy, datetime, ostry: arcpy.gp.overwriteOutput = True #Read input parameters from GP dialog folderPath = arcpy.GetParameterAsText(0) output = arcpy.GetParameterAsText(1) #Create an output file outFile = open(output, "w") #Report header outFile.write("MXD REPORT: \n") outFile.write("\n") outFile.write("This report is for all MXDs in a folder. It lists relevant information about\n") outFile.write("map document properties, data frame, layer, and table information for each MXD\n") outFile.write("in a system folder\n") outFile.write("\n") outFile.write("Date: " + str(datetime.datetime.today().strftime("%B %d, %Y")) + "\n") #Loop through each MXD file count = 0 for filename in os.listdir(folderPath): fullpath = os.path.join(folderPath, filename) if os.path.isfile(fullpath): if filename.lower().endswith(".mxd"): #Reference MXD mxd = arcpy.mapping.MapDocument(fullpath) count = 1 #Format output value if mxd.author =="": authorValue = "None" else: authorValue = mxd.author if mxd.summary =="": summaryValue = "None" else: summaryValue = mxd.summary BDS = arcpy.mapping.ListBrokenDataSources(mxd) if len(BDS) == 0: BDSValue = "None" else: BDSValue = "A total of " + str(len(BDS)) + " broken data source(s)." #Write MXD data to file outFile.write("\n") outFile.write("\n") outFile.write("------------------------------------------------------------------- \n") outFile.write("MAPDOCUMENT: " + os.path.basename(mxd.filePath) + "\n") outFile.write("------------------------------------------------------------------- \n") outFile.write("\n") outFile.write("\t Path: " + mxd.filePath + "\n") outFile.write("\t Last Saved: " + str(mxd.dateSaved) + "\n") outFile.write("\t Author: " + authorValue + "\n") outFile.write("\t Summary: " + summaryValue + "\n") outFile.write("\t Relative Paths: " + str(mxd.relativePaths) + "\n") outFile.write("\t Broken Data Sources: " + BDSValue + "\n") #Reference each data frame and report data DFList = arcpy.mapping.ListDataFrames(mxd) for df in DFList: #Format output values if df.description == "": descValue = "None" else: descValue = df.description #Write data frame data to file outFile.write("\n") outFile.write("\n") outFile.write("\t DATA FRAME: " + df.name + "\n") outFile.write("\n") outFile.write("\t\t Description: " + descValue + "\n") outFile.write("\t\t Spatial Reference: " + df.spatialReference.name + "\n") outFile.write("\t\t Transformation(s): " + str(df.geographicTransformations) + "\n") outFile.write("\t\t Map Units: " + df.mapUnits + "\n") try: outFile.write("\t\t Scale: " + str(df.scale) + "\n") except: outFile.write("\t\t Scale: Unknown \n") outFile.write("\t\t Rotation: " + str(df.rotation) + "\n") #Reference each layer in a data frame lyrList = arcpy.mapping.ListLayers(mxd, "", df) for lyr in lyrList: outFile.write("\n") outFile.write("\t\t LAYER: " + lyr.name + "\n") outFile.write("\t\t\t Group Layer Path: " + lyr.longName + "\n") if lyr.supports("dataSource"): outFile.write("\t\t\t Data Source: " + lyr.dataSource + "\n") try: outFile.write("\t\t\t Dataset type: " + arcpy.Describe(lyr.dataSource).datasettype + "\n") except: outFile.write("\t\t\t Dataset type: Unknown (could be a broken data source) \n") else: outFile.write("\t\t\t Data Source: N/A \n") if lyr.supports("definitionQuery"): if lyr.definitionQuery == "": outFile.write("\t\t\t Query Definition: None \n" ) else: outFile.write("\t\t\t Query Definition: " + lyr.definitionQuery + "\n") else: outFile.write("\t\t\t Query Definition: N/A \n") #Reference each table in a data frame tableList = arcpy.mapping.ListTableViews(mxd, df, "") for table in tableList: outFile.write("\n") outFile.write("\n") outFile.write("\t\t TABLEVIEW: " + table.name + "\n") outFile.write("\n") outFile.write("\t\t\t Data Source: " + table.dataSource + "\n") if table.definitionQuery == "": outFile.write("\t\t\t Query Definition: None \n") else: outFile.write("\t\t\t Query Definition: " + table.definitionQuery + "\n") del mxd if count ==0: outFile.write("\n") outFile.write("\n") outFile.write("---------------------------------------------------------------------------------- \n") outFile.write(" NO MXD FILES FOUND \n") outFile.write("---------------------------------------------------------------------------------- \n") outFile.close() #Open resulting text file os.startfile(output) #Delete variables that reference data on disk del folderPath, output, outFile, fullpathexcept Exception, e: import traceback map(arcpy.AddError, traceback.format_exc().split("\n")) arcpy.AddError(str(e))
Great question, try this:import arcpy, osparentDir = r"c:\some\path"for (path, dirs, files) in os.walk(parentDir):>>for file in files:>>>>if file.lower().endswith(".mxd"):>>>>>>mxd = arcpy.mapping.MapDocument(os.path.join(path, file))>>>>>>print mxd.filePathGet rid of the ">>" symbols.Hope this helps,Jeff
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.