Batch file 使用FOR/F在文本文件中搜索变量

Batch file 使用FOR/F在文本文件中搜索变量,batch-file,for-loop,Batch File,For Loop,我正在尝试在脚本的开头添加一个小检查。它包括让用户输入的变量%S%对照存储在文本文件中的列表进行检查。有人能提出为什么下面的代码不起作用,以及格式化文本文件的最佳方法吗 目前,你键入的任何内容都不会被破坏,无论它是否在列表中。 该列表当前的格式仅为逗号分隔的值,例如[600016000026000360004605] @echo off SET STORES=c:\Stores.txt SET /P S=What is the code [60***]? FOR /F "tokens=1,2

我正在尝试在脚本的开头添加一个小检查。它包括让用户输入的变量%S%对照存储在文本文件中的列表进行检查。有人能提出为什么下面的代码不起作用,以及格式化文本文件的最佳方法吗

目前,你键入的任何内容都不会被破坏,无论它是否在列表中。 该列表当前的格式仅为逗号分隔的值,例如[600016000026000360004605]

@echo off

SET STORES=c:\Stores.txt
SET /P S=What is the code [60***]?
FOR /F "tokens=1,2 delims=," %%S IN (%STORES%) DO GOTO FIND

ECHO BROKE

:FIND
ECHO NOT BROKE

PAUSE

首先,我认为您应该避免使用%S%和%%S,因为这很混乱。 接下来,如果可以的话,我建议您更改Stores.txt的格式。每行写一个数字。这样,您还可以去掉
delims=
选项

60001
60002
60003
60004
60005
然后,引入
IF
语句,根据文件内容检查用户输入。最后,我认为您需要文件中的
GOTO-END
语句来完成预期的操作。以下是完整的文件:

@echo off

SET STORES=Stores.txt
SET /P USERINPUT=What is the code [60***]?
FOR /F "delims=," %%P IN (%STORES%) DO IF "%USERINPUT%"=="%%P" GOTO FIND

ECHO BROKE
GOTO END

:FIND
ECHO NOT BROKE

:END
PAUSE

您没有检查
%S%
的值。您的for循环总是转到
:Find
。谢谢,但我对for命令的语法不是很熟悉。在看到下面托马斯的回答后,这是有道理的!非常感谢你,托马斯,现在说得通了。这将完美地工作!我注意到您建议使用单独的行,但分隔符中仍然有逗号。