Solved! Go to Solution.
Hi thanks very much for the reply.
Could I use that script with the following folder references removed so that all folders in M:\Planning\ and F:\ are replaced or do I have to do it by individual folder?
import arcpy, os from arcpy import env workspace = env.workspace = r"C:\Temp\Python" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) mapdoc.findAndReplaceWorkspacePaths(r"M:\Planning\", r"M:\Directorates\Planning\") mapdoc.findAndReplaceWorkspacePaths(r"F:\", r"M:\Directorates\Planning\") mapdoc.save() del mapdoc
Also do I have to enter that script into all current .mxd files or can it be entered directly into ArcGIS just once?
Thanks again
import arcpy, os from arcpy import env from arcpy import mapping workspace = env.workspace = r"F:" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) for df in mapping.ListDataFrames(mapdoc): for layer in mapping.ListLayers(mxd, "", df): if "F:\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("F:\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) elif "M:\\Planning\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("M:\\Planning\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) mapdoc.save() del mapdoc
workspace = env.workspace = r"F:"
import arcpy, os from arcpy import env workspace = env.workspace = r"C:\Temp\Python" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) mapdoc.findAndReplaceWorkspacePaths(r"M:\Planning\Development Plan", r"M:\Directorates\Planning\Development Plan") mapdoc.findAndReplaceWorkspacePaths(r"F:\Planning policy\Shapefiles", r"M:\Directorates\Planning\Planning Policy\Shapefiles") mapdoc.findAndReplaceWorkspacePaths(r"M:\Directorates\Planning", r"M:\Directorates\Planning\08Plan") mapdoc.save() del mapdoc
You could use the findAndReplaceWorkspacePaths to accomplish this. Here is an example:import arcpy, os from arcpy import env workspace = env.workspace = r"C:\Temp\Python" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) mapdoc.findAndReplaceWorkspacePaths(r"M:\Planning\Development Plan", r"M:\Directorates\Planning\Development Plan") mapdoc.findAndReplaceWorkspacePaths(r"F:\Planning policy\Shapefiles", r"M:\Directorates\Planning\Planning Policy\Shapefiles") mapdoc.findAndReplaceWorkspacePaths(r"M:\Directorates\Planning", r"M:\Directorates\Planning\08Plan") mapdoc.save() del mapdoc
import arcpy, os from arcpy import env workspace = env.workspace = r"C:\Temp\Python" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) mapdoc.findAndReplaceWorkspacePaths(r"M:\Planning\", r"M:\Directorates\Planning\") mapdoc.findAndReplaceWorkspacePaths(r"F:\", r"M:\Directorates\Planning\") mapdoc.save() del mapdoc
Hi thanks very much for the reply.
Could I use that script with the following folder references removed so that all folders in M:\Planning\ and F:\ are replaced or do I have to do it by individual folder?
import arcpy, os from arcpy import env workspace = env.workspace = r"C:\Temp\Python" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) mapdoc.findAndReplaceWorkspacePaths(r"M:\Planning\", r"M:\Directorates\Planning\") mapdoc.findAndReplaceWorkspacePaths(r"F:\", r"M:\Directorates\Planning\") mapdoc.save() del mapdoc
Also do I have to enter that script into all current .mxd files or can it be entered directly into ArcGIS just once?
Thanks again
import arcpy, os from arcpy import env from arcpy import mapping workspace = env.workspace = r"F:" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) for df in mapping.ListDataFrames(mapdoc): for layer in mapping.ListLayers(mxd, "", df): if "F:\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("F:\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) elif "M:\\Planning\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("M:\\Planning\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) mapdoc.save() del mapdoc
workspace = env.workspace = r"F:"
Yes, this is possible, but takes a little bit more coding. Here's an example:import arcpy, os from arcpy import env from arcpy import mapping workspace = env.workspace = r"F:" mxdList = arcpy.ListFiles("*.mxd") for mxd in mxdList: mxd2 = workspace + os.sep + mxd mapdoc = arcpy.mapping.MapDocument(mxd2) for df in mapping.ListDataFrames(mapdoc): for layer in mapping.ListLayers(mxd, "", df): if "F:\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("F:\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) elif "M:\\Planning\\" in layer.dataSource: origPath = layer.dataSource.split("\\") origPath2 = "" for x in origPath[0:-1]: origPath2 += x + os.sep origPath2 = origPath2[0:-1] dataSource = layer.dataSource.strip("M:\\Planning\\") dataSource = dataSource.split("\\") path = "" for y in dataSource[0:-1]: path += y + os.sep path = path[0:-1] mapdoc.findAndReplaceWorkspacePaths(origPath2, r"M:\Directorates\Planning" + os.sep + path) mapdoc.save() del mapdoc
I have not tested this extensively, but had a similar version of this script work successfully. Also, this will need to be only executed once. The script will loop through all MXDs in the workspace directory:workspace = env.workspace = r"F:"
In the above example, it will find all the MXDs on the F drive. You can update this to the folder location where your MXDs are.
Yes, you can run this script twice. You will just need to update the code to use the C:\ drive.