Batch file 批处理文件中不递增的变量

Batch file 批处理文件中不递增的变量,batch-file,for-loop,Batch File,For Loop,因此,我试图创建一个文件,该文件将读取一个名为saves的文本文件。在保存中,我希望它最多检查5次1:、2:、3:、4:、和5:。问题是,当我运行这个for循环检查文件5次时,它总是输出相同的内容,不管说什么都不会保存。非常感谢您的任何帮助或建议 @ECHO off SETLOCAL EnableDelayedExpansion SET test=0 FOR /L %%i IN (1,1,5) DO ( FINDSTR %%i: Saves.txt >NUL && SET

因此,我试图创建一个文件,该文件将读取一个名为saves的文本文件。在保存中,我希望它最多检查5次1:、2:、3:、4:、和5:。问题是,当我运行这个
for
循环检查文件5次时,它总是输出相同的内容,不管说什么都不会保存。非常感谢您的任何帮助或建议

@ECHO off
SETLOCAL EnableDelayedExpansion
SET test=0
FOR /L %%i IN (1,1,5) DO (
FINDSTR %%i: Saves.txt >NUL && SET /a %test%+1
ECHO %test%
)
IF %test% EQU 0 ECHO There are no saves. & GOTO :end
IF %test% GTR 0 ECHO There are saves. 
:END
PAUSE

您没有正确使用
SET
命令,并且在括号内的代码块中需要使用延迟扩展来正确显示变量

@ECHO off
SETLOCAL EnableDelayedExpansion
SET test=0
FOR /L %%i IN (1,1,5) DO (
    FINDSTR /B %%i: Saves.txt >NUL && SET /a test+=1
    ECHO !test!
)
IF %test% EQU 0 ECHO There are no saves. & GOTO :end
IF %test% GTR 0 ECHO There are saves. 
:END
PAUSE
一个更简单的选择是

FINDSTR /B "1: 2: 3: 4: 5:" Saves.txt >NUL 2>&1 && (ECHO There are saves.) || (ECHO There are no saves.)
如果所有的行都以数字和冒号开头,那么就可以这样做

FOR /F "tokens=1 delims=:" %%G IN (saves.txt) do set numsaves=%%G

您没有正确使用
SET
命令
set/a test+=1
然后需要使用延迟扩展来正确显示值<代码>回声!测试。答案完全正确。谢谢。至于这个建议,它不起作用,因为我仍然需要
测试
计数器来计算找到的实例数。我建议根据您的“检查字符串”,更好的答案(更简单的选项)应该是
@FindStr“1:2:3:4:5:”Saves.txt>Nul&&(Echo有保存)| Echo没有保存
。您会注意到,
FindStr
不会输出STDERR,当然除非“1:2:3:4:5:”不是一个有效的条目(它是),或者
Saves.txt
不存在(它应该存在),所以在这种情况下,没有必要将STDERR重定向到NUL。@Pitdroid,您可以提供一个Saves.txt文件的示例吗。如果我们能看到输入,我们可能会想出一个更好的解决方案。如果愿意,请更新您的问题。再次查看后修改我的代码,我没有使用
%test%
变量。我用了另一个for循环计数器。因此,只要我在数字后添加一个冒号(每行以数字开头,后跟一个冒号),您的解决方案就可以处理修改后的代码。@Pitdroid,在命令提示下输入
FindStr/?
并读取使用信息,而不是询问它,这样会更容易!示例:
FindStr”^[1-5]:“Saves.txt
FindStr/B”[1-5]:“Saves.txt