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

두 가지 이유로 귀하의 질문에 대한 호의를 얻지 못했습니다. 첫 번째는 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 조건 중 아무 것도 true가 아니기 때문에 전혀 변경되지 않으므로 이 무엇이든 그대로 남아 있으므로 스크립트를 실행했습니다. 당신이 구 포함 통해 범위 제로에 임의의 번호를 그 기반으로 이름을 설정하려면

, 당신은 사용할 수 있습니다

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 같은 문장에서 사용되는 생각하기 어렵다을 알고 예를 들어, 다음 스크립트는이 작업을 수행하는 방법을 보여줍니다 하지만 실제로는 약간의 유용한 기능을 가지고 있습니다 .--)

관련 문제