2017-12-15 2 views
-3

このコードは機能しません。これは、ランダムな形質とバックストーリーを持つ名前を生成することになっています。なぜそれがうまくいかないのか分かりません。私のバッチスクリプトが予期しない結果をもたらす理由をデバッグするには?

@echo off 
:top 
echo ---------------------------------------- 
echo random name genorator 
echo ---------------------------------------- 
echo  1 genorate name 
echo  2 add more info 
echo  3 what is this 
set /p rand= 
if %rand% == 1 goto first 
if %rand% == 2 goto 2 
if %rand% == 3 goto 3 
:first 
if %random% == 0 set fname=tony 
if %random% == 1 set fname=pamb 
if %random% == 2 set fname=ape 
if %random% == 3 set fname=bob 
if %random% == 4 set fname=jonathan 
if %random% == 5 set fname=dave 
if %random% == 6 set fname=avery 
if %random% == 7 set fname=felica 
if %random% == 8 set fname=herman 
if %random% == 9 set fname=elana 
cls 
echo your new name is %fname% 
pause 
:2 
exit 
:3 
exit 

1を押すと「あなたの新しい名前は」と表示されます。

+0

0から9の数字が魔法のように生成されると思いますか? – Squashman

+1

あなたの質問はうまく受信されていません。理由は2つあります。最初は、0%の詳細と100%の嘆願であるタイトルは読者を悩ませる可能性があり、その人は役に立たないと感じるでしょう。第二は、質問が携帯電話で構成されているように見える場合(単語を省略して、すべて小文字)、人々は何の努力もしなかったと考えます。そこから、デバッグにどのくらいの労力が費やされたのか疑問に思うでしょう。あなたがボランティアに対処しているときに**努力が集まることを覚えておいてください。 – halfer

+0

[バッチファイルのデバッグ](https://stackoverflow.com/a/42448601/3074564)を参照してください。 'set/p rand ='の代わりにコマンド__CHOICE__を使います。このコマンドのヘルプは、コマンドプロンプトウィンドウ 'choice /?'で実行してください。このコマンドの下で、 'goto Label%ERRORLEVEL%'を使って ':Label1'や':Label2'や ':Label3'でバッチファイルの実行を続けることができます。 – Mofi

答えて

3

タイプで:

echo %random% 

、それはあなたを与えるものを参照してください。あなたには9より高い数字が与えられます。例:

c:\pax> echo %random% 
1644 

ここであなたの名前がどのように設定されるかを考えてみましょう。 ifの条件のどれも真ではないため、全く変更されないので、のままで、のスクリプトを実行する前に残ります。

あなたは9包括までの範囲ゼロで乱数を取得し、それに基づいて名前を設定したい場合は、あなたが使用することができます。

set /a "num = %random% %% 10" 
if %num% == 0 set fname=tony 
rem ... and so on 

あなたの名前場合にも、ということに注意してくださいリストが長くなる可能性がある場合は、「アレイ」など、cmd(a)という高度な機能を使用することをお勧めします。たとえば、次のスクリプトは、これを実行する方法を示しています。

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem This is the list of names to use. 

set namelist=tony pam george bob john dave avery felica herman 
set namelist=!namelist! elana pax guido henry fortescue 

rem Construct the array, consisting of a base name with "_<index>" suffix. 

set /a "count = 0" 
for %%n in (!namelist!) do (
    set fname_!count!=%%n 
    set /a "count = count + 1" 
) 

rem Use modulo to select random index. 

set /a "idx = !random! %% count" 

rem Use double indirection to get actual name. 

for /f %%a in ('echo fname_!idx!') do echo !%%a! 

endlocal 

(a)のはい、私はそれが同じ文で使用されている言葉cmdadvancedを考えるのは難しいを知っている、実際にはにはがあります。知られていない場合は、便利な機能がいくつかあります:

関連する問題