0

1 から 30 までの数字をランダムに選択するナンバー ジェネレーターのコードがあります。バッチ ファイルを使用して、毎週のディナーの選択を行いたいので、自分で行う必要はありません。私の問題は、夕食の名前を番号に割り当てる方法がわからないことです。次に、夕食が「夕食の評価」を満たしているかどうかを確認したいのですが、そうでない場合は、夕食が十分に健康的であることを確認します評価を満たす場合、コードはディナーを再選択する必要があります。これは数値ジェネレーターです: (私がより良い方法でそれを行うことができるとは言わないでください。私は初心者のようなものです)

@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%

私の問題の解決策を見つけるのを手伝ってください。私は自分で健康的な夕食を選ぶのに飽きています.

4

2 に答える 2

0

それぞれがインデックスで識別される、同じ型の複数の要素を管理する方法は、配列を使用することです。Batch で配列を使用する前に、このトピックと環境変数の遅延展開について学ぶことを強くお勧めします。基本を理解したら、次のようなことを行うことができます。

set dinner[1]=Name of first dinner
set dinner[2]=Name of second dinner
set dinner[3]=Name of third dinner, etc

または、より高度な方法で:

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
   )
)

例えば:

set /A selection=%random% %% 30 + 1
if !rating[%selection%]! gtr 7 echo Rating of !dinner[%selection%]! correct: greater than 7
于 2013-11-12T21:00:12.687 に答える
0

わかりました、あなたが何を望んでいるのか完全にはわかりませんが、これはそれかもしれません:

Main.bat

@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

これにより、健康状態が高い場合、繰り返しや無限/非常に長いループが発生する可能性があることに注意してください。

ディナー.txt

これは、すべての選択肢のリストです。バッチファイルがそのサイズに適応するので、必要なだけ長く/短くすることができます。

全部で5つの選択肢があります

; 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

私はまだこれをテストしておらず、非常に平凡で長いため、エラーが発生することも保証できますが、少しのエラーテストでうまくいくと確信しています

モナ。

于 2013-11-12T09:40:56.797 に答える