<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers in Mapping Questions</title>
    <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567902#M6121</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Last post to this thread was October 2009.&amp;nbsp; Jeff, are you still taking up offers to view code for anyone still having this issue?&amp;nbsp; I'm using 10, SP4, and it crashes when using a WMS layer.&amp;nbsp; I am new to python and so far only use the Python script tool within an open instance of ArcMap.&amp;nbsp; Using your suggestion, I believe this to be the code I would use, but it crashes before I can get to the last line.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd=arcpy.mapping.MapDocument(r"Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"Temp2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is a cut and paste before it crashes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; mxd=arcpy.mapping.MapDocument(r"V:\Land-AK\LOC\ChugachNF\_MXD\Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"V:\Land-AK\FS\CHUG", r"V:\Land-AK\LOC\ChugachNF")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hitting enter again crashes it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Without the WMS layer, this code works perfectly:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd=arcpy.mapping.MapDocument(r"Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"Temp2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 11 Apr 2012 03:46:09 GMT</pubDate>
    <dc:creator>RayKreig</dc:creator>
    <dc:date>2012-04-11T03:46:09Z</dc:date>
    <item>
      <title>findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567895#M6114</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am moving a large number of mxd files, and need to update the data sources for various layer files. I have written a script that uses findAndReplaceWorkspacePaths. The script works fine as long as the mxd does not contain an image service layer. If it does contain such a layer, the script crashes. I am not trying to change the path in the image layer, but other layers in that mxd file.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This looks like bug NIM060315 &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/content/nimbus-bug?bugID=TklNMDYwMzE1"&gt;http://resources.arcgis.com/content/nimbus-bug?bugID=TklNMDYwMzE1&lt;/A&gt;&lt;SPAN&gt;, except I am not trying to change the image layer itself.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The bug report lists no workarounds. Is there anything I can do? Doing these by hand will be a big undertaking (and error prone).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 12 Feb 2011 11:47:49 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567895#M6114</guid>
      <dc:creator>DonMcClimans</dc:creator>
      <dc:date>2011-02-12T11:47:49Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567896#M6115</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I figured out how to work around this. You must temporarily remove the imagery layer from the mxd object. Then apply the findAndReplaceWorkspacePaths function(s). And finally restore the imagery layer you removed. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is some sample code that temporarily removes any layer with a name that contains "USGS EROS", changes a path, and adds the imagery layer back in.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy
import os
rootdir = r"C:Your_Root_Folder"
for subdir, dirs, files in os.walk(rootdir):
&amp;nbsp;&amp;nbsp;&amp;nbsp; for filename in files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fullpath = os.path.join(subdir, filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print filename
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isfile(fullpath):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basename, extension = os.path.splitext(fullpath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if extension.lower() == ".mxd":
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(fullpath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Temporarily remove the imagery layer(s)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for df in arcpy.mapping.ListDataFrames(mxd):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageLayerList = arcpy.mapping.ListLayers(mxd, "*USGS EROS*", df)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in ImageLayerList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.RemoveLayer(df, lyr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Search-and-replace to fix up data source paths.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath", False)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add the imagery layers back in
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in ImageLayerList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.AddLayer(df, lyr, "BOTTOM")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save()
del lyr
del df
del mxd
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 16:38:06 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567896#M6115</guid>
      <dc:creator>DonMcClimans</dc:creator>
      <dc:date>2021-12-12T16:38:06Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567897#M6116</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;We reproduced this issue an will hopefully be able to address it in the next service pack.&amp;nbsp; Our fix is to prevent web service and image service layers from supporting Layer.dataSource.&amp;nbsp; You can then test to see if a layer supports the Layer.dataSource property before attempting to modify a data source.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you want to check its status, it is: NIM067149&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Apr 2011 17:10:49 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567897#M6116</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2011-04-15T17:10:49Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567898#M6117</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt; I figured out how to work around this. You must temporarily remove the imagery layer from the mxd object. Then apply the findAndReplaceWorkspacePaths function(s). And finally restore the imagery layer you removed.&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;Here is some sample code that temporarily removes any layer with a name that contains "USGS EROS", changes a path, and adds the imagery layer back in.&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt; &lt;SPAN style="font-family:&amp;quot;Courier New&amp;quot;;"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy
import os
rootdir = r"C:Your_Root_Folder"
for subdir, dirs, files in os.walk(rootdir):
&amp;nbsp;&amp;nbsp;&amp;nbsp; for filename in files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fullpath = os.path.join(subdir, filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print filename
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isfile(fullpath):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basename, extension = os.path.splitext(fullpath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if extension.lower() == ".mxd":
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(fullpath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Temporarily remove the imagery layer(s)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for df in arcpy.mapping.ListDataFrames(mxd):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageLayerList = arcpy.mapping.ListLayers(mxd, "*USGS EROS*", df)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in ImageLayerList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.RemoveLayer(df, lyr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Search-and-replace to fix up data source paths.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath", False)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add the imagery layers back in
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in ImageLayerList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.AddLayer(df, lyr, "BOTTOM")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save()
del lyr
del df
del mxd
&lt;/PRE&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmcclimans, this code is very helpful, thanks. A question - as you loop through the df's you call mxd.findAndReplaceWorkspacePaths, but won't that try to update sources for the entire mxd file, not just the current df ? What if you have image layers in other df's ? That may not be an issue for me as this installation may have very few or no mxd files with multiple df's that contain image layers, but I just wanted to clarify.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, proposed solution by ESRI implies looking at map document layer by layer, so then each layer source would have be updated with lyr.findAndReplaceWorkspacePath, I've run into other issues using that technique - it returns an exception on annotation layers which I cannot skip over as they need to have source updated as well, so I need to use your technique.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks, George&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:27:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567898#M6117</guid>
      <dc:creator>GeorgeRogers</dc:creator>
      <dc:date>2021-12-12T00:27:54Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567899#M6118</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;This issue will be addressed with SP3.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 07 Sep 2011 14:45:19 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567899#M6118</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2011-09-07T14:45:19Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567900#M6119</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Jeff - I'm new to this issue today after finding my python script threw the same error as @dmcclimans found, i.e. python crashes when using findAndReplaceWorkspacePaths on mxds that contain image service layers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've upgraded to SP3 (build 3200) but I still get the same error.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Was this issue definitely fixed with SP3 ?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 19:15:42 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567900#M6119</guid>
      <dc:creator>RachaelYule</dc:creator>
      <dc:date>2011-10-21T19:15:42Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567901#M6120</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I just confirmed this on a 10.0 SP3 machine.&amp;nbsp; Image Server layers no longer show up as layers that support the lyr.support("DATASOURCE") property.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Before attempting to change a data source, check to see if this property is true.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;for lyr in arcpy.mapping.ListLayers(mxd):
&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you are still having a problem, please send me a map package so I can test with your data.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:27:56 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567901#M6120</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2021-12-12T00:27:56Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567902#M6121</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Last post to this thread was October 2009.&amp;nbsp; Jeff, are you still taking up offers to view code for anyone still having this issue?&amp;nbsp; I'm using 10, SP4, and it crashes when using a WMS layer.&amp;nbsp; I am new to python and so far only use the Python script tool within an open instance of ArcMap.&amp;nbsp; Using your suggestion, I believe this to be the code I would use, but it crashes before I can get to the last line.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd=arcpy.mapping.MapDocument(r"Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"Temp2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is a cut and paste before it crashes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; mxd=arcpy.mapping.MapDocument(r"V:\Land-AK\LOC\ChugachNF\_MXD\Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt; for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"V:\Land-AK\FS\CHUG", r"V:\Land-AK\LOC\ChugachNF")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hitting enter again crashes it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Without the WMS layer, this code works perfectly:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd=arcpy.mapping.MapDocument(r"Temp.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.findAndReplaceWorkspacePaths(r"oldpath", r"newpath")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"Temp2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Apr 2012 03:46:09 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567902#M6121</guid>
      <dc:creator>RayKreig</dc:creator>
      <dc:date>2012-04-11T03:46:09Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567903#M6122</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Sure, send me a small zip or map package that includes your simplified script to &lt;/SPAN&gt;&lt;A href="mailto:jbarrette@esri.com"&gt;jbarrette@esri.com&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Apr 2012 15:36:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567903#M6122</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2012-04-11T15:36:14Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567904#M6123</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Same problem here with findAndReplaceWorkspacePaths.&amp;nbsp; Any solutions forthcoming?&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am running ArcGIS 10 build 3600 with SP3.&amp;nbsp; My script crashes on maps with image service layers, works fine when those layers are removed.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Apr 2012 02:45:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567904#M6123</guid>
      <dc:creator>MitchComstock</dc:creator>
      <dc:date>2012-04-17T02:45:21Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567905#M6124</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm at SP 2.&amp;nbsp; The following Python script was a successfull work around.&amp;nbsp; Note, I'm not experienced in arcpy so judge accordingly (although, hey, it does work!):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import os, sys, arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy.mapping as MAP&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;mxdPath = sys.argv[1]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;oldDataSource = r'P:\cby\gisprojects\umpqua\Phase_II'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;newDataSource = r'P:\cby\gisprojects\umpqua\Soup_Cr_VRH'&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.overwriteoutput = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd = MAP.MapDocument(mxdPath)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;for lyr in MAP.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&amp;nbsp; # note, this caught some of the image service layers but let one slip through&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("SERVICEPROPERTIES"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.serviceProperties['ServiceType'] == "ImageServer":&amp;nbsp; # note, this caught the image service layer that slipped through the first "if" statement&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.findAndReplaceWorkspacePath(oldDataSource, newDataSource, False)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.findAndReplaceWorkspacePath(oldDataSource, newDataSource, False)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.save()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del mxdPath&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del oldDataSource&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del newDataSource&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del mxd&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 May 2012 21:42:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567905#M6124</guid>
      <dc:creator>deleted-user-9ppwtkjpkhrH</dc:creator>
      <dc:date>2012-05-07T21:42:20Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567906#M6125</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;This should have been addressed at 10.0 SP3 with NIM067149: Block Web service layers from supporting layer.dataSource.&amp;nbsp; The example in the previous post solves one problem but will introduce another if something.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The correct solution should be:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;BR /&gt;I just confirmed this on a 10.0 SP3 machine. Image Server layers no longer show up as layers that support the lyr.support("DATASOURCE") property.&lt;BR /&gt; &lt;BR /&gt;Before attempting to change a data source, check to see if this property is true.&lt;BR /&gt; &lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
for lyr in arcpy.mapping.ListLayers(mxd):
&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"): If you are still having a problem, please send me a map package so I can test with your data.
&lt;/PRE&gt; &lt;BR /&gt;&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:27:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567906#M6125</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2021-12-12T00:27:59Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567907#M6126</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello Jeff,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I, too, am having a great deal of trouble with this issue.&amp;nbsp; I am running ArcGIS 10 SP4 and attempting the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy, os&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;folderPath = r"G:\US_Army_COE_Sac\ERS\Ft_Irwin\_MXDs\Checker"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for filename in os.listdir(folderPath):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fullpath = os.path.join(folderPath, filename)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isfile(fullpath):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basename, extension = os.path.splitext(fullpath)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if extension.lower() == ".mxd":&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print fullpath + "\n...Checking"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(fullpath)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.findAndReplaceWorkspacePaths(r"G:\US_Army_COE_Sac", r"G:\US_Army_COE_Sac\ERS\Ft_Irwin")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print fullpath + "...Updated"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have also tried looping through each layer after the "DATASOURCE" test using layer.findAndReplaceWorkspacePath() with the same result of a full crash. The MXDs each have a Bing streaming imagery layer in the TOC and the script works fine if i remove it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance for any ideas on why this is still not working....&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Steve&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 May 2012 19:11:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567907#M6126</guid>
      <dc:creator>StephenIrving</dc:creator>
      <dc:date>2012-05-14T19:11:11Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567908#M6127</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I was able to reproduce using Bing Maps Aerial basemap.&amp;nbsp; The higher level "Basemap" group layer does NOT support "DATASOURCE" but the sub-layer "BingMapsAerial" unfortunately does (the value is an empty string).&amp;nbsp; We'll need to correct this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the meantime can you try:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
for lyr in arcpy.mapping.ListLayers(mxd):
&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE") and lyr.supports("DATASETNAME"):

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The BingMapsAerial sub-layer does NOT support "DATASETNAME".&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:28:02 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567908#M6127</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2021-12-12T00:28:02Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567909#M6128</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Sweet! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you that works well! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Steve&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 May 2012 21:35:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567909#M6128</guid>
      <dc:creator>StephenIrving</dc:creator>
      <dc:date>2012-05-15T21:35:52Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567910#M6129</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Sweet! &lt;BR /&gt;&lt;BR /&gt;Thank you that works well! &lt;BR /&gt;&lt;BR /&gt;Steve&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Looks like i spoke a bit too soon.&amp;nbsp; Now it is throwing this error:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Executing: MXDSourceUpdate G:\US_Army_COE_Sac\ERS\Ft_Irwin\_MXDs\_Reports\Workplan G:\US_Army_COE_Sac\ERS G:\US_Army_COE_Sac\ERS\Ft_Irwin&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Start Time: Tue May 15 17:00:57 2012&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Running script MXDSourceUpdate...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Traceback (most recent call last):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; File "D:\TEMP\_Python\mxd_source_update_20120515.py", line 33, in &amp;lt;module&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.findAndReplaceWorkspacePath(origSource2, newSource2,"FALSE")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; File "C:\Program Files\ArcGIS\Desktop10.0\arcpy\arcpy\utils.py", line 181, in fn_&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return fn(*args, **kw)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; File "C:\Program Files\ArcGIS\Desktop10.0\arcpy\arcpy\_mapping.py", line 601, in findAndReplaceWorkspacePath&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return convertArcObjectToPythonObject(self._arc_object.findAndReplaceWorkspacePath(*gp_fixargs((find_workspace_path, replace_workspace_path, validate), True)))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ValueError: Layer: Unexpected error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Layer: Unexpected error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Completed script MXDSourceUpdate...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Failed to execute (MXDSourceUpdate).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Failed at Tue May 15 17:01:00 2012 (Elapsed Time: 3.00 seconds)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am not sure, but is seems like the arcpy module is trying to validate the paths.&amp;nbsp; My understanding was the script would work regardless of whether or not it found a valid path.&amp;nbsp; I tried explicitly setting the validation to "FALSE" which yielded the same result.&amp;nbsp; My MXDs typically have layers referencing many sources, I was hoping this tool would function as a true find and replace.&amp;nbsp; That is, it would ignore any layers in which it did not "find" the search string.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any ideas?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy, os&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;try:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Read input parameters from GP dialog&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; folderPath = arcpy.GetParameterAsText(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; origSource = arcpy.GetParameterAsText(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; newSource = arcpy.GetParameterAsText(2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Loop through each MXD file&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; origSource2 = origSource.replace("\\","/")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; newSource2 = newSource.replace("\\","/")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for filename in os.listdir(folderPath):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fullpath = os.path.join(folderPath, filename)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isfile(fullpath):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basename, extension = os.path.splitext(fullpath)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if extension.lower() == ".mxd":&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd = arcpy.mapping.MapDocument(fullpath)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print fullpath + "\n\n...Checking"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for lyr in arcpy.mapping.ListLayers(mxd):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lyr.supports("DATASOURCE") and lyr.supports("DATASETNAME"):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.findAndReplaceWorkspacePath(origSource2, newSource2,"FALSE") &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print fullpath + "\n\n...Updated"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mxd.save()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; del mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Delete variables that reference data on disk&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; del folderPath, origSource, newSource, filename, fullpath&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;except Exception, e:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map(arcpy.AddError, traceback.format_exc().split("\n"))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddError(str(e))&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;BTW it actually still crashes completely if I try to use mxd.findAndReplaceWorkspacePaths() after the layer test.&amp;nbsp; I would prefer this method as it is supposed to update all layers including table layers which are apparently missed by the layer.findAndReplaceWorkspacePath()... but maybe i am just missing something?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 May 2012 23:23:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567910#M6129</guid>
      <dc:creator>StephenIrving</dc:creator>
      <dc:date>2012-05-15T23:23:39Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567911#M6130</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm not sure this logic will work.&amp;nbsp; For example, let us say I have a layer with the following data source:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;C:\\temp\\lines&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Your code [origSource2 = origSource.replace("\\","/")] is converting the string to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;C:/temp/lines&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then you are trying to perform a find and replace with a "find" string that does NOT exist in any of your sources because you changed it but perhaps that is why you are using validate=False.&amp;nbsp; I don't know enough to assess the error.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can you send me just your MXD (no data) to &lt;/SPAN&gt;&lt;A href="mailto:jbarrette@esri.com"&gt;jbarrette@esri.com&lt;/A&gt;&lt;SPAN&gt;.&amp;nbsp; From that I should be able to determine the data sources.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 May 2012 14:00:41 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567911#M6130</guid>
      <dc:creator>JeffBarrette</dc:creator>
      <dc:date>2012-05-16T14:00:41Z</dc:date>
    </item>
    <item>
      <title>Re: findAndReplaceWorkspacePaths crashes when mxd contains image layers</title>
      <link>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567912#M6131</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG style="font-style: italic;"&gt;"I may have found the issue.&amp;nbsp; It helps to try real scripts against real MXDs.&lt;BR /&gt;&lt;BR /&gt;Change this line:&lt;BR /&gt;lyr.findAndReplaceWorkspacePath(r"G:\US_Army_COE_Sac\ERS\Ft_Irwin", r"G:\US_Army_COE_Sac","FALSE")&lt;BR /&gt;&lt;BR /&gt;To:&lt;BR /&gt;lyr.findAndReplaceWorkspacePath(r"G:\US_Army_COE_Sac\ERS\Ft_Irwin", r"G:\US_Army_COE_Sac", False)&lt;BR /&gt;&lt;BR /&gt;The validation parameter is a Python Boolean, not a string.&amp;nbsp; You want to use False with an upper case "F", lower case "alse")&lt;BR /&gt;&lt;BR /&gt;Jeff"&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The above worked perfectly! Thanks again!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 May 2012 22:22:16 GMT</pubDate>
      <guid>https://community.esri.com/t5/mapping-questions/findandreplaceworkspacepaths-crashes-when-mxd/m-p/567912#M6131</guid>
      <dc:creator>StephenIrving</dc:creator>
      <dc:date>2012-05-16T22:22:16Z</dc:date>
    </item>
  </channel>
</rss>

