windows - 批处理文件标记忽略空分隔符

标签 windows batch-file command-line

我正在尝试将 CSV 文件中的列加载到变量中。我的 CSV 文件包含空列,因此可以有 ,, ,它似乎被以下内容忽略:

FOR /F "tokens=3 delims=," %%a in (csvfile.csv) do (
    set date=%%a
    echo %%a
)

因此,如果文件 csvfile.csv 包含

fred,wilma,tony, john, greg, wilber, blake
chris,,steve,deon,bryan,mark,anthony

我想要结果:

tony
steve

但我得到:

tony
deon

如果我在空列中放置一个空格,这将按预期工作。

如何设置 delims 使其不忽略空列?

最佳答案

for 将连续分隔符视为一个。在大多数情况下,这很有帮助。有时并非如此。

所以你必须以 for 可以按你的预期处理的方式编写你的行。

将文件的每一行作为一个整体读取,在开头和结尾添加引号,并将每个 , 替换为 ",",结果为

"chris","","steve","deon","bryan","mark","anthony"

这可以很高兴地用另一个 for 进行解析。 %%~b 中的波形符删除周围的引号。

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=*" %%a in (csvfile.csv) do (
  set line="%%a"
  for /f "tokens=3 delims=," %%b in ("!line:,="^,"!") do echo %%~b
)

关于windows - 批处理文件标记忽略空分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36372429/

相关文章:

c - 为什么我们需要给背景画笔颜色加1?

c++ - Libpurple 无法连接 - Purple_presence_is_online 失败

batch-file - 批量仅显示小数点后 2 个字符

batch-file - exe终止后如何重定向输出?

C 中的命令行参数打印不正确

mysql - 将文件从本地计算机传输到远程服务器

linux - zsh + 电力线 : prompt disappears with long command line

windows - Linux 上的键盘和鼠标交互

windows - 批处理文件中的 CSV 格式

batch-file - 如何获取分配给在循环内处理的环境变量的逗号分隔字符串的每个项目?