質問
バッチ用のカードゲームを開発しています。 [完了したらリンクを表示します]
基本的に私がしたいことは、「%random%」を「%numbs%」に設定することです。
set %numbs%=%random%
そして、表示された%random%番号から1つの値をユーザーに入力してほしい
echo %numbs%
Set nuchoo=
set /p nuchoo=Number:
私の質問は、ユーザーが入力した値が%numbs%の値に含まれているかどうかを確認する方法についてです。もしそうなら、
GOTO :validnucho
そうでない場合
GOTO :unvalidnucho
:validnuchoに進むと、%numbs%変数からその番号を削除する必要があります。 %numbs%varに数値の2倍が含まれている場合は明らかに重要なので、2つのうち1つだけを削除する必要があります。私が知っている残り。
解決
これで開始できます
以下をInstr.cmdとして保存します
@echo off
rem These two lines allow tracing to be turned on by entering
rem set TRACE=ECHO on the cmd line
if not defined TRACE set TRACE=rem
%TRACE% on
rem Allow use of delayed variable expansion using !
setlocal ENABLEDELAYEDEXPANSION
if /I [%1]==[Test] (
call :Test
goto :eof
)
:Instr
set mTestStr=%1
rem set /a does arithmatic
set /a TestIdx=0
set Found=N
set CopiedStr=
:startLoop
rem extract character at index TestIndx to test
set TestedChar=!mTestStr:~%TestIdx%,1!
rem echo TestedChar if trace is on
%TRACE% %TestedChar%
If [!TestedChar!]==[] (
goto :exitInstr
)
If [%TestedChar%]==[%2] (
rem Testedchar matchs search character,
rem so we have found the char we were looking for
if %Found%==Y (
set CopiedStr=%CopiedStr%%TestedChar%
)
set Found=Y
) else (
set CopiedStr=%CopiedStr%%TestedChar%
)
rem Increment Index
SET /a TestIdx=TestIdx+1
goto :startLoop
:exitInstr
rem endlocal but keep CopiedStr and Found
endlocal & set CopiedStr=%CopiedStr% & set Found=%Found%
goto :eof
:Test
call :Instr abcde c
call :Verify Y %Found% "call :Instr abcde c - Found"
call :Verify abde, %CopiedStr% "call :Instr abcde c - CopiedStr"
call :Instr abcde x
call :Verify N %Found% "call :Instr abcde x - Found"
call :Verify abcde, %CopiedStr% "call :Instr abcde x - CopiedStr"
call :Instr abcdec c
call :Verify Y %Found% "call :Instr abcdec c - Found"
call :Verify abdec, %CopiedStr% "call :Instr abcdec c - CopiedStr"
echo Tests Done
goto :eof
:Verify
set Expected=%1
set Expected=%Expected:"=%
set Actual=%2
set Actual=%Actual:"=%
set Msg=%3
set Msg=%msg:"=%
If not "%Expected%"=="%Actual%" (
echo Failed: Expected "%Expected%" but was "%Actual%" - %Msg%
) else (
echo OK Expected "%Expected%" - %Msg%
)
goto :eof
所属していません StackOverflow