It's possible to achieve with a list workflow, though it certainly sounds like a treacherous rabbit hole to me. A site workflow might be better suited, but that would require developing your own actions in Visual Studio, since the default actions for site workflows in SP2010 do not include looping through list items (or even invoking web services!). Some third party workflow add-ons, like those offered by K2 and Nintex, add a fancier workflow interface and more custom actions that could easily achieve what you're looking for, but for a one-time update like this, they seem like overkill.
If you have access to log in to the web front end servers, a custom Powershell script will be the path of least resistance. Just start the SharePoint Management Shell (Start -> All Programs -> Microsoft SharePoint 2010 Products -> SharePoint 2010 Management Shell) and you can use Powershell to directly and programmatically access the SharePoint object model.
$web = get-spweb http://server/site
$list = $web.lists["Your Library Name"]
$list.Items | foreach-object { $file = $_.file; $file.MoveTo("destination url"); $file.Update();}
$web.dispose()
Instead of typing the commands directly into the console, you can save a complete script to a text file with the extension .ps1
and then execute it from the management shell by typing &"filename.ps1
" (replacing filename.ps1
with the path to your file, which you can get by holding shift and right-clicking on the file, then selecting "copy as path").
Note that if you have exceeded the list view threshold, accessing $list.Items
will likely fail due to size. You can temporarily disable throttling on the list by executing $list.EnableThrottling = $false
. Alternatively, you can query the list using an SPQuery object to access a smaller subset of the items at a time, paging through the results until the entire list is processed.
I'm guessing you'll need a more complicated Powershell script than the barebones example above, but I recommend asking a new question for assistance (after searching for any relevant existing questions) if you do decide to go that route.