Пакетный файл, чтобы зашифровать предложение

Я пытаюсь создать командный файл, который будет принимать заранее определенное предложение и шифровать его, а затем передавать его пользователю.

Например, предопределенное предложение: мне действительно нравится писать командные файлы

Эхо для пользователя: наслаждайтесь пакетными файлами, которые я пишу

Я понимаю, как работает переменная%RANDOM%, а также циклы, но поскольку я не знаю, как долго будет длиться предложение, и не понимаю, как определять / заполнять массивы в пакетных файлах, я не знаю, с чего начать.

Пожалуйста, помогите мне заполнить недостающие части в моих знаниях. Спасибо!

2 ответа

Решение
@echo off
    setlocal enableextensions enabledelayedexpansion

    call :scramble "I really enjoy writing batch files" scrambled

    echo %scrambled%

    endlocal
    exit /b 

:scramble sentence returnVar
    setlocal enabledelayedexpansion
    set "output=" & for /f "tokens=2" %%y in ('cmd /q /v:on /c "for %%w in (%~1) do echo(^!random^! %%w"^|sort') do set "output=!output! %%y"
    endlocal & set "%~2=%output:~1%"
    exit /b 

Если создается экземпляр cmd, который выводит каждое слово, которому предшествует случайное число. Этот список отсортирован, номера удалены и слова объединены. Все это обернуто в подпрограмму с входными и выходными параметрами.

Для обычного подхода, используемого в других языках, разбиения строки на части, сохранения в массиве (вроде, в пакетном сценарии нет массивов), перемешивания и объединения подпрограмма может быть чем-то вроде

:scramble sentence returnVar
    setlocal enabledelayedexpansion
    set "counter=0" & for %%w in (%~1) do ( set "_word[!random!_!counter!]=%%w" & set /a "counter+=1" )
    set "output="   & for /f "tokens=2 delims==" %%w in ('set _word[') do set "output=!output! %%w"
    endlocal & set "%~2=%output:~1%"
    exit /b 

Вот простой метод - он не обрабатывает ядовитые символы, но для вашей строки это нормально.

@echo off
call :scramble I really enjoy writing batch files
goto :EOF 
:scramble
set "scrambled%random%=%1"
shift
if not "%~1"=="" goto :scramble
for /f "tokens=1,* delims==" %%a in ('set scrambled') do set /p "=%%b "<nul
echo(
pause
Другие вопросы по тегам