Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 巴奇,我有点小麻烦_Batch File_Findstr - Fatal编程技术网

Batch file 巴奇,我有点小麻烦

Batch file 巴奇,我有点小麻烦,batch-file,findstr,Batch File,Findstr,所以我写了一个批量脚本,这将有助于组织我在游戏中运行的一个小彩票。 它要求用户输入玩家姓名,然后从1到100最多输入5个彩票号码。 该脚本将玩家姓名和他们选择的号码添加到文本文档中,并将这些号码添加到文本文档中,以便它知道哪些号码已经被使用,并且如果我尝试键入重复的号码,它将警告我。同时还进行了一点排序,以便显示所使用的号码,以便更容易查看 当我使用findstr/c:查找taked number文件时,如果我查找1,它会假设1、10、100等是相同的数字,因为……这些数字中有我要查找的数字。我

所以我写了一个批量脚本,这将有助于组织我在游戏中运行的一个小彩票。 它要求用户输入玩家姓名,然后从1到100最多输入5个彩票号码。 该脚本将玩家姓名和他们选择的号码添加到文本文档中,并将这些号码添加到文本文档中,以便它知道哪些号码已经被使用,并且如果我尝试键入重复的号码,它将警告我。同时还进行了一点排序,以便显示所使用的号码,以便更容易查看

当我使用findstr/c:查找taked number文件时,如果我查找1,它会假设1、10、100等是相同的数字,因为……这些数字中有我要查找的数字。我通过输入一位数01-09解决了这个问题,但在findstr眼里,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

首先,findstr足够聪明,可以分辨1、10和100之间的差异,而无需格式化小于10的数字。我建议删除前导的0,因为这就是batch指示数字是十六进制的方式,您将得到08和09的错误

现在,你的问题给我带来了不少麻烦,但我还是解决了。当您将数字回显到文本文件时,您无意中在数字的末尾添加了一个空格,而当findstr查找确切的字符串时,它找不到它,因为您得到的是15,而不是15

谢天谢地,解决办法很简单。改变

echo%multinum1%>>takennumbers.txt&转到下一步

echo%multinum1%>>takennumbers.txt&转到下一步


对其他三行这样做。

嗨,你能粘贴固定代码吗?:p我做了你说的更改,但现在如果第二个人选择了一个单位数字,它会发出回声,因为回声关闭,而不是数字。出于某种原因,除了你最初提到的那个之外,我没有测试任何意外行为。让我来研究一下……将setlocal enabledelayedexpansion行添加到@echo off下的文件顶部,并更改echo%multinum1%>>takennumbers.txt&转到echo旁边!多num1!>>takennumbers.txt&goto next非常感谢您!你修复了它:我不明白为什么会修复它,但它确实修复了lol。我自己也不完全确定,但基于它如何修复for循环的类似问题,我想这与批处理不总是很好地处理括号有关。