powershell /?
If you run the above command this help text will show
-Command
...
To write a string that runs a Windows PowerShell command, use the format:
"& {<command>}"
where the quotation marks indicate a string and the invoke operator (&)
causes the command to be executed.
Therefore you need to make the following changes in your batch file
powershell -Command "&{ cat .\tmp.txt | ForEach-Object {$_ -replace '\D', ''} }"
(note the extra curly braces wrapped around your command and % being replaced with ForEach-Object)