如何读取 Windows 批处理文件中的逗号分隔文本文件?

Sms*_*Sms 2 windows command-line batch-file

我可以让它读取文本文件,直到它变成逗号分隔的文本文件。

我想读取每一行上的两个变量,并使用 If 语句测试每个变量的另一个条件。问题是我无法正确读取变量。尝试了很多事情,但这就是我要发布的内容。超时是为了看看发生了什么:

for /f "tokens=*" %%a in (TestText.txt) do (
timeout /t 1
echo %%a is the present variabe
timeout /t 2
if %%a=="One","1" echo Match for "One","1"
timeout /t 3
if %%a=="One""1" echo Match for "One","1"
timeout /t 4
if %%a=="One" echo Match for "One"
timeout /t 5
if %%a=="1" echo Match for "1"
timeout /t 6
)
Run Code Online (Sandbox Code Playgroud)

测试文本.txt

"One","1"
"Two","2"
"Three","3"
"Four","4"
Run Code Online (Sandbox Code Playgroud)

输出:

"One","1" is the present variabe
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 5

您的情况的问题是您必须转义逗号 ( ,)。在命令提示符下,这是通过插入符号 ( ^) 完成的。

这有效:

for /f %%a in (TestText.txt) do (
    if %%a=="One"^,"1" echo Match for "One","1"
)
Run Code Online (Sandbox Code Playgroud)

但是,由于您使用的是 CSV,因此您可能需要用逗号分隔每一行。这是通过tokens=1-n delims=,选项完成的,其中n是每行值的数量。

单独的值将存储在%%a%%b等中:

for /f "tokens=1-2 delims=," %%a in (TestText.txt) do (
    if %%a=="One" echo Match for "One"
    if %%b=="1"   echo Match for "1"
)
Run Code Online (Sandbox Code Playgroud)

更多信息

  • 请注意,指定“tokens=1*”实际上会将第一个令牌之后的每个令牌存储在“%%b”中。如果输入行是 `"One","1","a"`,那么 `%%a` 将得到 `"One"`,而 `%%b` 将得到 `"1","a"`。可以说,更正确的方法是“tokens=1,2”,它将忽略第二个之后的任何标记。当然,选择使用哪一种还要根据情况而定。 (2认同)