批处理文件来扰乱一个句子

时间:2014-02-27 18:07:09

标签: arrays loops batch-file scramble

我正在尝试创建一个批处理文件,该文件将采用预定义的句子并对其进行加扰,然后将其回显给用户。

例如,预定义的句子: 我真的很喜欢编写批处理文件

回应用户: 享受批处理我写的文件

我理解%RANDOM%变量如何工作,以及循环,但因为我不知道句子会有多长,也不知道如何在批处理文件中定义/填充数组,我不知道在哪里开始。

请帮我填写我所知的缺失部分。谢谢!

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

这是一个简单的方法 - 它不处理毒药字符,但对于你的字符串,它没问题。

@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