批处理脚本 - 如何写入文本文件的单行

时间:2015-09-09 00:08:08

标签: batch-file

我试图看看我是否不能使用批处理脚本创建一个随机名称生成器(基本上是为了好玩)。我们的想法是生成一个批处理文件,它创建可发音的名称而不是随机文本字符串。

虽然我可以轻松地创建一个从预制列表中选择随机名称的简单系统,但这很无聊。我想要做的是有一个系统,它选择一个可变的音节串并将它们串成一个名称。

通过以下方式起作用:

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”......

2 个答案:

答案 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%"