-
23-12-2019 - |
题
我试图创建一个批量文件,该文件将采用预定义的句子并争抢它,然后将其呼吸给用户。
例如,预定义的句子: 我真的很喜欢写作批处理文件
echo到用户: 享受批处理真正的文件我写作
我了解%随机%变量如何工作,以及循环,但是因为我不知道句子的句子是多长时间,也不了解如何在批处理文件中定义/填充数组,我不知道在哪里开始。
请帮我填写我的知识中缺失的碎片。谢谢!
解决方案
@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
. 不隶属于 StackOverflow