首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为批处理文件中的数字变量分配名称

如何为批处理文件中的数字变量分配名称
EN

Stack Overflow用户
提问于 2013-11-12 08:49:17
回答 2查看 201关注 0票数 0

我有一个数字生成器的代码,它随机选择1到30之间的数字。我想用一个批处理文件来选择每周的晚餐,这样我就不用自己做了。我的问题是,我不知道如何将晚餐的名字分配给数字,然后我想要它检查晚餐是否符合“晚餐等级”,这确保了晚餐足够健康,如果它不符合标准,那么代码将/应该让它重新选择晚餐。这是数字发生器:(别告诉我我能做得更好,我是个菜鸟)

代码语言:javascript
复制
@echo off
echo.
echo             Welcome %username%
ping localhost -n 2 >nul
echo        This Is The Dinner Selector.
ping localhost -n 2 >nul
echo This Program Will Select The Weekly Dinner.
ping localhost -n 2 >nul
set /a selection1=%random% %%30 +1
set /a selection2=%random% %%30 +1
set /a selection3=%random% %%30 +1
set /a selection4=%random% %%30 +1
set /a selection5=%random% %%30 +1
echo %selection1%
echo %selection2%
echo %selection3%
echo %selection4%
echo %selection5%

请帮我找到解决问题的办法,我厌倦了自己选择健康的晚餐。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 09:40:56

好的,不完全确定您想要什么,但可能是这样的:

Main.bat

代码语言:javascript
复制
@echo off
setlocal Enabledelayedexpansion
echo.
echo             Welcome %username%
sleep 2
echo        This Is The Dinner Selector.
sleep 2
echo This Program Will Select The Weekly Dinner.
sleep 2
Echo.
Echo.
Echo How healthy do you want your food [0 - Anything :: 9 - max]
choice /c "1234567890" /n /m ": " /d 0 /t 20
set rate=%errorlevel%
set /a count=0
set /a total=0
for /f %%a in (Dinner.txt) do (set /a total+=1)


:: START LOOP ----------------------
:choose
set /a count+=1
:random
set /a process=0
set sel=
set /a sel=%random% %% %total% + 1

for /f "tokens=1,2 delims=:" %%a in (Dinner.txt) do (
    set /a process+=1
    if !process! EQU !sel! (
        if %%b GEQ !rate! (
            set sel=%%a
            )
        )
    )

if "%sel%" EQU "" (Echo %sel%
) Else (
goto :random)

if count leq 5 goto choose
:: END LOOP   ----------------------

cls
Echo Enjoy your meal!
sleep 3
Exit

注意,如果健康状况很好,这可能导致重复和/或无限/真正长的循环。

Dinner.txt

这是你所有选择的清单。根据批处理文件的大小,它可以是任意长/短的。

总共有5种选择

代码语言:javascript
复制
; This is how you format the dinner file: [Food]:[Healthyness 0 - 9]
; Lines starting with semi-colons are ignored (if you want a blank line comment it)
; Examples:
;
; Vegetarian
Salad:9
Pasta:8
;
;
; Non-Veg
Uncooked Meat:2
Pizza:5
Burger:6
Pure Oil:0

我还没有测试这个,也可以保证会有一个错误,因为它是相当平凡和漫长的,但我相信一点错误测试将完成这项工作。

蒙娜。

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 21:00:12

管理几个相同类型的元素的方法(每个元素都由一个索引标识)是通过一个数组实现的。在尝试使用批处理数组之前,我强烈建议您了解这个主题,以及环境变量的延迟扩展。一旦你掌握了基本知识,你就可以做这样的事情:

代码语言:javascript
复制
set dinner[1]=Name of first dinner
set dinner[2]=Name of second dinner
set dinner[3]=Name of third dinner, etc

或者,以更先进的方式:

代码语言:javascript
复制
set i=0
for %%a in (Pasta:9 Dessert:5 Soup:8) do (
   for /F "tokens=1,2 delims=:" %%b in ("%%a") do (
      set /A i+=1
      set dinner[!i!]=%%b
      set rating[!i!]=%%c
   )
)

例如:

代码语言:javascript
复制
set /A selection=%random% %% 30 + 1
if !rating[%selection%]! gtr 7 echo Rating of !dinner[%selection%]! correct: greater than 7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19924644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档