批处理文件直接通过命令

时间:2013-07-14 07:47:58

标签: batch-file

基本上,我有一个问题设置,如果我回答“打断”,它应该说“你决定最后走过那里......”,在那之下,“这个人会怎么反应?”然后,它应该从1-21生成一个随机数,然后暂停。但是,当我回答“中断”时,它会关闭程序。虽然,当我删除随机数生成器时,它会在“人将如何反应?”之后暂停。我可以退出那里的数字发生器有什么问题?

以下是代码:

echo Do you interrupt or wait until they are finished talking?
echo.
set /p choice=
if %choice%==interrupt (
  echo You decide to finally walk over there. You ask the man who is telling the story, "So what's in the labyrinth?"
  echo How does the man react?
  pause
  set /a num=((20 + 1) * %random%) / 32768 + 1
  echo %num%
  pause
  exit
)

感谢大家阅读和/或回复!

4 个答案:

答案 0 :(得分:2)

如果您想在代码块中读取具有更改值的变量,则始终需要delayed expansion!variables!而不是%variables%。此外,for循环解析器读取代码块内的所有右括号),并希望结束该块。你应该用^插入符号或双引号来转义这个括号。

答案 1 :(得分:2)

你必须逃避收盘)

替换

set /a num=((20 + 1) * %random%) / 32768 + 1

set /a num=((20 + 1^) * %random%^) / 32768 + 1

答案 2 :(得分:0)

你必须在这个等式周围加上引号

set /a num="((20 + 1) * %random%) / 32768 + 1"

或者

set /a "num=((20 + 1) * %random%) / 32768 + 1"

或者如Stephan所说,你也可以逃避右括号)

此外,如果您想在%num%块中使用if "%choice%"=="interrupt" (...),则必须使用延迟扩展,例如Endoro说。

为了改进你的代码,你还应该在比较它之前在上面选择引号,以防止%choice%中的空格弄乱代码。

答案 3 :(得分:0)

不需要转义(或使用延迟扩展)的方法如下,并且还注意不区分大小写检查“中断”。

echo Do you interrupt or wait until they are finished talking?
echo.
set /p choice=
if /i not "%choice%"=="interrupt" goto :skip001
  echo You decide to finally walk over there. You ask the man who is telling the story, "So what's in the labyrinth?"
  echo How does the man react?
  pause
  set /a num=((20 + 1) * %random%) / 32768 + 1
  echo %num%
  pause
  exit
:skip001