HOW TO: Change file extension of an existing item in SharePoint document library

This post is a contribution from Aaron Miao, an engineer with the SharePoint Developer Support team.

For various reasons, people want to change the file extension of an existing item in a document library.  For example, with SharePoint 2007, files with JSON extension in document library can be opened without problems.  However, once you upgrade to SharePoint 2010, you cannot open the file anymore.  You’ll get an error similar to what’s shown below.

An error occurred during the processing of /Shared Documents/test.json.

The page must have a <%@ webservice class=”MyNamespace.MyClass” … %> directive.

In order to be able to see the JSON file content with SharePoint UI, one option is to change the file extension from JSON to TXT.  But you cannot change the name or display name of the file.  This can be accomplished by two methods as shown in the below samples that uses PowerShell.  And of course, you can do the same with SharePoint server OM.

Use SPFile.MoveTo

 $site = Get-SPSite "https://yoursite"
 $web  = $site.RootWeb
 $list = $web.Lists["Shared Documents"]
 $item = $list.GetItemById(0)
 $file = $item.File
 $file.MoveTo($item.ParentList.RootFolder.Url + "/” + ”test.txt")
 $file.Update()

Use SPFile.CopyTo

 $site = Get-SPSite "https://yoursite"
 $web  = $site.RootWeb
 $list = $web.Lists["Shared Documents"]
  
 $caml = '
   <Where>
     <Eq>
       <FieldRef Name="File_x0020_Type" />
       <Value Type="Text">json</Value>
     </Eq>
   </Where>
 '
  
 $query = new-object Microsoft.SharePoint.SPQuery
 $query.Query = $caml
  
 $items = $list.GetItems($query)
   
 foreach($item in $items)
 {
       $file = $item.File
       $url = $file.ServerRelativeUrl
       $newurl = $url.replace(".json", ".txt")
       $file.CopyTo($newurl)
 }

Hope this was helpful.