Em 2013, você deve usar o PowerShell:
Get-ChildItem | Where-Object {$_.Name -match '#'} | ForEach-Object { Rename-Item -Path $_.Name -NewName $($_.Name -Replace "#", "") -WhatIf }
Navegue até o diretório em questão e execute a linha. Ele encontra todos os arquivos com um # e renomeia cada um deles. Remova o '-Whatif' para realmente executar a operação.
Uma versão mais curta usando aliases e padrões seria:
ls | ? {$_.Name -match "#"} | ForEach { rni $_.Name $($_.Name -Replace "#", "")}
Pelo menos, a versão longa parece mais legível para mim do que a sintaxe de lote dos anos 80. A única parte oculta aqui é o '$ .Name', '$ ' no PowerShell refere-se ao objeto atual no loop. Aqui, em todos os casos, para o arquivo atual. Como precisamos de uma expressão para o parâmetro -NewName, precisamos envolvê-la em $ ()