in my case i use a .NET Console Application, and run in my SharePoint Server like a Windows Task, daily.
This is the .NET Code:
private static void CopyListItems()
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://server"))
{
using (SPWeb web = site.OpenWeb())
{
web.AllowUnsafeUpdates = true;
SPList listSource = web.Lists["Source Custom List"];
SPList listDestination = web.Lists["Destination Custom List"];
SPQuery query = new SPQuery();
query.Query = "<Where><Lt><FieldRef Name='Expires' /><Value IncludeTimeValue='FALSE' Type='DateTime'><Today /></Value></Lt></Where>";
SPListItemCollection items = listSource.GetItems(query);
foreach (SPListItem item in items)
{
SPListItem destinationItem = listDestination.Items.Add();
destinationItem["Title"] = item.Title;
destinationItem.Update();
}
listDestination.Update();
SPQuery querySource = new SPQuery();
querySource.Query = "<Where><Lt><FieldRef Name='Expires' /><Value IncludeTimeValue='FALSE' Type='DateTime'><Today /></Value></Lt></Where>";
SPListItemCollection itemsSource = listSource.GetItems(querySource);
int total = itemsSource.Count - 1;
for (int contador = total; contador >= 0; contador--)
{
itemsSource[contador].Delete();
}
listSource.Update();
web.AllowUnsafeUpdates = false;
}
} from
});
}
A CAML code compare a Lower Than with Today function the Expires Field from Custom List source. And repeat the query to DELETE the items from Custom List Source.