我的生活创作者计划有问题。 它只是选择代表某些东西的随机数字并将其组合在一起。 (我尝试过组合变量) 这是代码:
int
这里是变量推杆的事情:
@set num=1
@SET /A a=%RANDOM% * 10 / 32768 + 1
@if %a% == 10 set life%num%= ----
@if %a% == 9 set life%num%=O
@if %a% == 8 set life%num%=^
@if %a% == 7 set life%num%=%
@if %a% == 6 set life%num%=#
@if %a% == 5 set life%num%=@
@if %a% == 4 set life%num%=)
@if %a% == 3 set life%num%=()
@if %a% == 2 set life%num%=~
@if %a% == 1 set life%num%=OO
@echo %a% >"gencode".txt
@set num=2
@SET /A a=%RANDOM% * 10 / 32768 + 1
@if %a% == 10 set life%num%=----
@if %a% == 9 set life%num%=O
@if %a% == 8 set life%num%=^
@if %a% == 7 set life%num%=%
@if %a% == 6 set life%num%=#
@if %a% == 5 set life%num%=@
@if %a% == 4 set life%num%=)
@if %a% == 3 set life%num%=()
@if %a% == 2 set life%num%=~
@if %a% == 1 set life%num%=OO
@set life3= %life1%-%life2%
@echo %life3%>"lifeform".txt
@echo %a% >>"gencode".txt
所以我想知道,(只需将每个变量组合到一个并将其转换为一行)如何设置要写入的行以便我可以将每个变量写入一行,从而创建生命 - 形成。 我问这个是因为每当我回应一些东西时,它会在文本文件中下移1行。
这是生活创造者的实验版本:
@set final= 500
@set /a pass= %pass% + 1
@set /a cnum= %cnum% + 1
@set counterold=%counter%
@set life%cnum%-%counter%= %a%-%b%
@if %pass% == 1 goto start
:repeat
@if %ficnum% == 500 goto final
@set life2%cnum%-%counter%= life%counterold%-life%counter%
@set life2%cnum%-%counterold%= life%counterold%-life%counter%
@set /a ficnum= %ficnum% + 1
@set life3%ficnum%-%counter%= life2%counterold%-life2%counter%
@goto repeat
:final
@set /a final= %final% + 1
@set /a counter= %counter% + 1
@set /a ficnum= %ficnum% + 1
@set counter1= %counter%
@set ficnum1= %ficnum%
:finalst
@set /a final= %final% - 1
@set /a counter1= %counter1% - 1
@set /a ficnum= %ficnum% - 1
@set /a ficnum1= %ficnum1% - 1
@set /a counter= %counter% - 1
@set final%final%=%life3%%ficnum%-%counter%-%life3%%ficnum1%-%counter1%
@if %final% == 0 goto finalend
@goto finalst
:finalend
@echo final0>"lifeform".txt
答案 0 :(得分:3)
更新:要输出到文件,如问题标题中所示,否特殊注意事项适用(使用通常的输出重定向),最终使这个问题与Windows batch: echo without new line重复。 功能
如果我理解正确,您正在寻找一种方法回显(打印到标准输出)字符串,而不会有拖尾换行符。
cmd.exe
' echo
不允许您这样做,但解决方法:
set "var=world"
<NUL set /p ="Hello, %var%: "
<NUL set /p ="Still on the same line. "
echo Still on the same line, but ending it now.
这将输出以下单行:
Hello, world: Still on the same line. Still on the same line, but ending it now.
警告重新错误级别:<NUL set /p ...
技巧将%ERRORLEVEL%
设置为1
;为了明确地将其重置为0
,请使用虚拟命令,例如ver >NUL
。
限制:
字符串不得包含"
字符。 - 虽然您可以双重它们以避免语法错误,但它们会在输出中也出现了翻倍。
字符串的第一个非空白字符不能是=
- 无论是文字还是变量扩展的结果。< / p>
<nul set /p ="=foo"
和<nul set /p ==foo
莫名其妙地导致语法错误(!)。<nul set /p =^=foo
也会导致语法错误,而<nul set "/p==foo"
实际上会被解释为非交互式设置变量/p
到值=foo
,从而产生无输出。)&
和|
等shell元字符时,该命令将会中断。This answer可以提供一个强大的解决方案来处理所有这些边缘情况,尽管它确实需要辅助。批处理文件。
工作原理:
set /p <varName>=<value>
旨在提示用户输入变量值,方法是从stdin读取一行,使用<value>
作为提示字符串打印内嵌;试试set "/pFOO=Enter FOO: "
<NUL set /p ="..."
之类的东西会在禁止交互式提示时使用此内联打印提示字符串(通过提供NUL
设备(<NUL
)的stdin输入,这会导致set /p
立即返回,因为没有什么可读的。)
请注意/p ="..."
在=
之前不包含变量名称的方式,因为我们对此处的变量不感兴趣 - set
幸运的是很好(你) 可能使用虚拟变量名称 - 例如/p UNUSED="..."
,但请注意,您可能无意中用该名称覆盖现有变量;另外,使用变量名称不使用前导=
的字符串帮助解决语法错误问题。