Powershell в пакетном режиме: строка в двоичный и обратно - PullRequest
0 голосов
/ 01 мая 2020

В моем пакетном файле я пытаюсь преобразовать строку (%input%) в двоичный файл и сохранить результат в переменной пакета %varBinary%. Моя попытка:

for /f "delims=" %%a in ( ' powershell " [System.Text.Encoding]::UTF8.GetBytes(/"%_input%"/) | %{ [System.Convert]::ToString($_,2).PadLeft(8,'0') } " ' ) do set "varBinary=%%a"
echo.%varBinary%
echo."%varBinary%"
echo "%varBinary%"
echo %varBinary%

Вывод %varBinary% всегда пуст. Что здесь не так? И как преобразовать двоичный файл в исходную строку, чтобы он работал? Потому что это тоже не сработало.

Например, привет должно быть 0110100001100101011011000110110001101111 .

1 Ответ

2 голосов
/ 01 мая 2020

Вы были близки, но вы пропустили несколько символов, которые нужно было экранировать.

Во-первых, 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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...