【问题标题】:Batch Script - How to write to single line of a text file批处理脚本 - 如何写入文本文件的单行
【发布时间】:2015-09-09 00:08:08
【问题描述】:

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

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

通过以下方式工作:

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

但这实际上可能使变量为“

【问题讨论】:

  • 最好将变量设置为文件名。然后,您可以简单地使用代码从以该变量命名的文件中提取文本。您还应该考虑使用powershell 来代替。更丰富的编程环境,使用起来更少尴尬和令人沮丧。
  • 不幸的是,我根本不知道如何使用powershell。或任何其他编程语言。另外,如果我可以批量解决这个问题,我可以将此位添加到我拥有的程序中,该程序为我重命名文件夹中的文件,因此每个文件都有可发音的名称,而不是“Gh17haM”。我也宁愿解决这个单一的问题,也不愿学习一门全新的编程语言。
  • 这有帮助吗:stackoverflow.com/questions/134001/… 答案之一是set /p VAR1=&lt;test.txt
  • @JerryJeremiah 是的,很多!谢谢。

标签: batch-file


【解决方案1】:

我故意省略了第一行的@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

【讨论】:

    【解决方案2】:

    在您的代码中,您首先生成一个介于 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%"
    

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2012-10-09
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多