Вы были близки, но вы пропустили несколько символов, которые нужно было экранировать.
Во-первых, powershell (и большинство других вещей) использует \
для экранирования кавычек, а не /
. Во-вторых, в пакетном режиме необходимо экранировать %
, используя вместо этого %%
. (На заметку о том, что вы обычно должны экранировать |
, но вам не нужно здесь, потому что это в строке в кавычках.)
Наконец, если вы хотите построить строку, а не просто верните двоичный файл последнего символа, вам нужно будет включить отложенное расширение и объединить каждую строку вывода.
@echo off
setlocal enabledelayedexpansion
set /p "_input=Input: "
for /f "delims=" %%A in ('powershell "[System.Text.Encoding]::UTF8.GetBytes(\"%_input%\") | %%{[System.Convert]::ToString($_,2).PadLeft(8,'0')}"') do set "varBinary=!varBinary!%%A"
echo.!varBinary!
echo."!varBinary!"
echo "!varBinary!"
echo !varBinary!