我试图看看我是否不能使用批处理脚本创建一个随机名称生成器(基本上是为了好玩)。我们的想法是生成一个批处理文件,它创建可发音的名称而不是随机文本字符串。
虽然我可以轻松地创建一个从预制列表中选择随机名称的简单系统,但这很无聊。我想要做的是有一个系统,它选择一个可变的音节串并将它们串成一个名称。
通过以下方式起作用:
set /a roll=%random%%%100+1
if %roll% leq 100 set syllable=ah
if %roll% leq 95 set syllable=roh
依此类推,最后检查计数是否等于某个数字,如果不是广告1则计算并循环回滚动另一个音节。音节的数量通过类似的修改的%random%选择,范围从2到8.
不幸的是,我坚持让该循环的多次使用成为单个变量。我认为您可以使用type命令从文本文件向批处理文件输入文本,所以我想要做的是制定一种方法
echo %syllable% >> name.txt
产生一个文本文件,其中所有条目都在一行中没有空格,而不是每行一个条目。
我还要感谢有人向我展示如何使用set命令使变量等于文本文件的内容。我想会是:
set name=< name.txt
但实际上这可能使变量为“&lt; name.txt”......
答案 0 :(得分:0)
我故意在第一行省略了@ECHO OFF。请运行此并检查输出。这看起来像你想要完成的事情吗?
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A ROLL=%RANDOM% %% 100
FOR /L %%i IN (1,1,10) DO (
SET /A ROLL=!RANDOM! %% 100
echo ROLL is now !ROLL!
IF !ROLL! LEQ 100 SET NEWSYLL=ah
IF !ROLL! LEQ 50 SET NEWSYLL=roh
SET SYLLABLE=!SYLLABLE!!NEWSYLL!
echo SYLLABLE is now !SYLLABLE!
)
ECHO %SYLLABLE%>olfile.txt
EXIT /B 0
答案 1 :(得分:0)
在你的代码中,你首先生成1到100之间的随机数,然后选择第一个音节,如果数字在100到96之间(?),如果数字在95(和90?)之间,则选择第二个音节。此方法是繁琐。生成1和音节数之间的随机数要简单得多,然后直接得到一个。
下面的程序使用数组直接获取每个随机音节;批处理文件中的数组管理的详细说明在Arrays, linked lists and other data structures in cmd.exe (batch) script给出。每个音节使用延迟扩展连接在一个变量中。
@echo off
setlocal EnableDelayedExpansion
rem Define the syllable array
set N=0
for %%a in (ah1 roh1 ah2 roh2 etc) do (
set /A N+=1
set "syllable[!N!]=%%a"
)
rem Get a random number of syllables (from 2 to 8)
set /A len=%random% %% 7 + 2
rem Generate the name
set "name="
for /L %%i in (1,1,%len%) do (
set /A num=!random! %% N + 1
for %%n in (!num!) do set "name=!name!!syllable[%%n]!"
)
echo Name: "%name%"