我正在尝试创建一个批处理文件,该文件将采用预定义的句子并将其打乱,然后将其回显给用户。
例如,预定义的句子:I really enjoy writing batch files
回声用户:享受我写的批处理文件
我了解 %RANDOM% 变量的工作原理以及循环,但是因为我不知道句子将有多长,也不了解如何在批处理文件中定义/填充数组,所以我不知道从哪里开始。
请帮助我填写我所知道的缺失部分。谢谢!
我正在尝试创建一个批处理文件,该文件将采用预定义的句子并将其打乱,然后将其回显给用户。
例如,预定义的句子:I really enjoy writing batch files
回声用户:享受我写的批处理文件
我了解 %RANDOM% 变量的工作原理以及循环,但是因为我不知道句子将有多长,也不了解如何在批处理文件中定义/填充数组,所以我不知道从哪里开始。
请帮助我填写我所知道的缺失部分。谢谢!
@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
If 实例化一个 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