Solução em lotes, altere o caminho para se adequar ao seu ambiente.
@Echo off
for /f "delims=" %%A in ('Dir /B/S "X:\path\to\start\*#*" 2^>Nul') do (
set "fn=%%~nxA"
Call ren "%%A" "%%fn:#=%%"
)
Um forro do PowerShell não precisa de um ForEach, pois Rename-Item
aceita entrada canalizada:
Get-ChildItem '*#*' -File -Recurse | Rename-Item -NewName {$_.Name -Replace '#'}