Usando este script do PowerShell: (encontrado aqui: link )
Edit2: editou o script para corresponder ao seu cenário específico.
Param(
$path = "Q:\Test",
[array]$include = @("*.docx","*.docx")
)
$application = New-Object -ComObject word.application
$application.Visible = $false
$binding = "System.Reflection.BindingFlags" -as [type]
[ref]$SaveOption = "microsoft.office.interop.word.WdSaveOptions" -as [type]
## Get documents
$docs = Get-childitem -path $Path -Recurse -Include $include #Remove -Recurse if you dont want to include subfolders.
## Iterate documents
foreach($doc in $docs)
{
try
{
## Get document properties:
$document = $application.documents.open($doc.fullname)
$BuiltinProperties = $document.BuiltInDocumentProperties
$pn = [System.__ComObject].invokemember("item",$binding::GetProperty,$null,$BuiltinProperties,"Creation Date")
$value = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$pn,$null)
## Clean up
$document.close([ref]$saveOption::wdDoNotSaveChanges)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($BuiltinProperties) | Out-Null
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($document) | Out-Null
Remove-Variable -Name document, BuiltinProperties
## Rename document:
if($doc.PSChildName -match "^(.+)(\d{3})(.+)$") # Matches "(Summary meeting )(123)(.doc)"
{
$date=$value.ToString('yyyy-MM-dd');
$newName = "$($matches[2]) $($date) $($matches[1])$($matches[2])$($matches[3])";
write-host $newName;
Rename-Item $doc $newName
}
}
catch
{
write-host "Rename failed."
$_
}
}
## Clean up
$application.quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($application) | Out-Null
Remove-Variable -Name application
[gc]::collect()
[gc]::WaitForPendingFinalizers()
Altere a variável $ caminho para a pasta em que seus documentos estiverem.
Edite a seção #Rename com qualquer lógica extra que você precisar, o regex que eu adicionei corresponde ao exemplo específico fornecido em sua postagem, ajuste-a para que ela corresponda a todos os seus documentos. Qualquer padrão dentro de um (parênteses) pode ser referido usando o array "matches []", iniciando no índice 1.
Eu sugiro que você comente a linha "Renomear-Item" até ter certeza de que o "$ newName" está correto. O extra $ () adicionado ao redor das variáveis na linha "$ newName=" - existe para que as variáveis se expandam.
PS: Certifique-se de ativar a execução de scripts powershell, abra o PS como admin e digite: "Set-ExecutionPolicy RemoteSigned")