批处理,我有点麻烦

时间:2014-11-10 18:58:41

标签: batch-file findstr

所以我写了一个批处理脚本,这将有助于组织我在游戏中运行的小彩票。 它要求用户输入球员名称,然后从1-100最多5个彩票号码。 该脚本将玩家姓名和他们选择的数字添加到文本文档中,并且还将数字添加到文本文档中,以便它知道哪些数字已经被采取"如果我尝试输入复制品,我会发出警告(还会进行一些排序,以便显示"拍摄的#34;数字#34;顺序"以便更容易看到)。

当我使用" findstr / c:"查看"采取的数字"如果我找到" 1"它会假设1,10,100等是相同的数字。因为......这些数字有我在他们中间寻找的东西。我通过输入单个数字作为01-09来解决这个问题,但这仍然让我留下了" 10"和100(在发现者的眼中)相同。

所以我尝试使用" findstr / x / c:"获得确切的价值,这就是我遇到问题的地方。既然/ x在那里它只是忽略了检查值是否完全相同而我无法理解为什么,请求帮助:P它让我疯了。

@echo off
echo --------------------
echo Lottery Program
echo --------------------
echo.
echo.
echo These are the Taken numbers.
type takennumbersnice.txt
echo.
echo.
set /p name= Please type the players name 
:thestart
echo ---------------------------
set /p multinum1= Please type their first number [01-100] 
findstr /x /c:%multinum1% takennumbersnice.txt && (
echo This number has already been taken! & pause && goto thestart
) || (
echo %multinum1%>> takennumbers.txt & goto next) 
:next
:thestart2
echo ---------------------------
set /p multinum2= Now type their second number [0 if they only picked 1 number] 
if '%multinum2%'=='0' (
goto endofnums
) else (
goto 3
)
:3
findstr /x /c:%multinum2% takennumbersnice.txt && (
echo This number has already been taken! & pause  && goto thestart2
) || (
echo %multinum2%>> takennumbers.txt &goto next2)
:next2
:thestart3
echo ---------------------------
set /p multinum3= Now type their third number [0 if they only picked 2 numbers] 
if '%multinum3%'=='0' (
goto endofnums
) else (
goto 4
)
:4
findstr /x /c:%multinum3% takennumbersnice.txt && (
echo This number has already been taken! & pause  && goto thestart3
) || (
echo %multinum3%>> takennumbers.txt &goto next3)
:next3
:thestart4
echo ---------------------------
set /p multinum4= Now type their fourth number [0 if they only picked 3 numbers] 
if '%multinum4%'=='0' (
goto endofnums
) else (
goto 5
)
:5
findstr /x /c:%multinum4% takennumbersnice.txt && (
echo This number has already been taken! & pause  && goto thestart4
) || (
echo %multinum4%>> takennumbers.txt &goto next4)
:next4
:thestart5
echo ---------------------------
set /p multinum5= Now type their fifth number [0 if they only picked 4 numbers] 
if '%multinum5%'=='0' (
goto endofnums
) else (
goto 6
)
:6
echo ---------------------------
findstr /x /c:%multinum5% takennumbersnice.txt && (
echo This number has already been taken! & pause  && goto thestart5
) || (
echo %multinum5%>> takennumbers.txt)
:endofnums
set number= %multinum1% %multinum2% %multinum3% %multinum4% %multinum5%
echo %name% has chosen the number[s] %number%
echo %name% %number% >> lottery.txt
sort < takennumbers.txt > takennumbersnice.txt
echo press any key to exit
pause > nul
exit

1 个答案:

答案 0 :(得分:0)

首先,findstr非常聪明,能够分辨出1,10和100之间的区别,而不必格式化小于10的数字。我建议删除前导0,因为这是批次表示数字是多少十六进制,你会得到08和09的错误。

现在,你的问题让我有点麻烦,但我想通了。当您将数字回显到文本文件时,您无意中在数字的末尾添加了一个空格,当findstr查找确切的字符串时,它找不到它,因为而不是“15”,您已经得到“15” (注意空格)。

谢天谢地,解决方案很简单。变化

echo %multinum1%>>takennumbers.txt & goto next)

echo %multinum1%>>takennumbers.txt&goto next)

为这样的其他三行执行此操作。

相关问题