Batch / Fenster: Zufallszahlen
-
05-07-2019 - |
Frage
Ich bin ein Kartenspiel für die Batch-Entwicklung. [Einen Link zu geben, wenn Sie fertig]
Basiclly ich will, was zu tun ist 'gesetzt' '% zufälliges%' auf ‚% numbs%.
set %numbs%=%random%
Und dann mag ich in der einen Wert aus dem% zufälligen% Zahlen angezeigt eingeben
echo %numbs%
Set nuchoo=
set /p nuchoo=Number:
Was nun meine Frage ist, wie zu überprüfen, ob der Wert eingegeben durch den Benutzer in dem Verzeichnis% ist numbs% -Wert. Wenn ja,
GOTO :validnucho
Wenn nicht,
GOTO :unvalidnucho
Wenn es geht an: validnucho, sollte es diese Zahl aus dem% numbs% var löschen. Es spielt eine Rolle offensichtlich, wenn die%% var numbs enthält 2x die Zahl, so sollte es nur eine der beiden löschen. Der Rest weiß ich.
Lösung
Das sollten Sie beginnen
Speichern Sie die folgenden als 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow