-1

ヘルプ!人のリストを作れるバッチファイルを作っています。次に、誰かが到着したら、その人の名前を入力すると、リストに載っているかどうかがチェックされます。バッチファイルがその人がリストに載っているかどうかをチェックするとき、それは機能しません(私は大文字を使用しておらず、スペルも正しいです)、機能していないバッチファイルの何が問題なのかを理解する必要があります。したがって、主な問題は、リスト上の人をチェックしても見つからないことです。申し訳ありませんが、これをどのように表現すればよいか正確にはわかりません。:) これが私のプログラムのコードです。

@echo off
title Event Starter
echo Event Starter
set /p Eventname=Event Name: 
cls
goto :Participants

:Participants
title Name Of Participants
set /p Name1=Name: 
cls
set /p Name2=Name: 
cls
set /p Name3=Name: 
cls
set /p Name4=Name: 
cls
set /p Name5=Name: 
cls
set /p Name6=Name: 
cls
set /p Name7=Name: 
cls
set /p Name8=Name: 
cls
pause
goto :checker

:checker
title Enter Person's Name
echo Enter Who Arrived To Check The Database
echo.
echo.
echo.
set /p check1=
goto :database

:database
title Checking Database For The Given Person
echo Checking Database For The Given Person
cls
echo 5 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 20 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 35 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 50 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 70 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 85 %
ping 1.1.1.1 -n 1 -w 5000 > nul
cls
echo 100 %
ping 1.1.1.1 -n 1 -w 5000 > nul
if %check1%==%Name1% goto :valid
if %check1%==%Name2% goto :valid
if %check1%==%Name3% goto :valid
if %check1%==%Name4% goto :valid
if %check1%==%Name5% goto :valid
if %check1%==%Name6% goto :valid
if %check1%==%Name7% goto :valid
if %check1%==%Name8% goto :valid
goto :invalid

:valid
title %check% Is On The List!
echo %check% Is On The List!
ping 1.1.1.1 -n 1 -w 5000 > nul
ping 1.1.1.1 -n 1 -w 5000 > nul
pause
goto :checker

:invalid
title %check% Is Not On The List!
echo %check% is Not On The List!
echo This Is Case-Sensative
ping 1.1.1.1 -n 1 -w 5000 > nul
ping 1.1.1.1 -n 1 -w 5000 > nul
goto :checker
4

3 に答える 3

1

正直なところ、そこには不要な行がたくさんあるので、エラーを特定する代わりに、スクリプトをよりクリーンなバージョンに書き直しました。これにより、問題も解決されるはずです! :)

@echo off
title Event Starter
setlocal enabledelayedexpansion
echo Event Starter
set /p Eventname=Event Name: 
cls
title Name Of Participants
for /l %%a in (1,1,8) do (
set /p Name[%%a]=Name: 
cls
)

:checker
title Enter Person's Name
echo Enter Who Arrived To Check The Database
echo.
echo.
echo.
set /p check1=

title Checking Database For The Given Person
echo Checking Database For The Given Person
cls
for %%b in (5,20,35,50,70,85,100) do (
echo %percent%%
ping 1.1.1.1 -n 6 > nul
cls
)
for /l %%a in (1,1,8) do (
if !check1!==!Name[%%a]! goto :valid
)
goto :invalid

:valid
title %check% Is On The List!
echo %check% Is On The List!
ping 1.1.1.1 -n 1 -w 10000 > nul
goto :checker

:invalid
title %check% Is Not On The List!
echo %check% is Not On The List!
echo This Is Case-Sensative
ping 1.1.1.1 -n 1 -w 10000 > nul
goto :checker
于 2013-02-06T11:51:34.767 に答える
1

--EDIT-- コードを修正しました。今すぐ動作するはずです。

setlocal enabledelayedexpansion

:a
    cls
    set/p name=Name: 
    for /f "delims=" %%i in (File_path) do (
       set name2=%%i
       if /i !name! equ !name2! goto b
       )
    cls
    echo They're not on the list...
    pause
    goto a
:b
    cls
    echo They're on the list...
    pause
    goto a

スクリプトは、ファイル内にユーザー定義名 ( name) が含まれているかどうかを確認します。:bそうである場合は、リストにあったことを報告するためにそれを送信します。gotoコマンドをexit /b 2true (リストにあった) とexit /b 3false (リストにない) に 置き換えることで、これを関数に変更できます。

以下に示すように、名前はそれぞれ別の行にある必要があります。コマンドの/iスイッチのため、大文字小文字は関係ありません。if

Mark Finch
Julie Fernz
Tom Riddle...
于 2013-02-06T07:04:13.990 に答える
0

set /p Name1=Name:構文はよくわかりませんが、頭文字の入力方法(例)と確認用の名前の入力方法( )に違いがありますset /p check1=。それは重要ですか?

于 2013-02-06T01:55:29.987 に答える