【问题标题】:First empty strings not parsed in for-loop未在 for 循环中解析的第一个空字符串
【发布时间】:2015-10-20 11:18:28
【问题描述】:

我在一个批处理文件中有一个 FOR /F 循环,该循环从 Outlook 导出的联系人读取 CSV 输出。 CSV 输出中的前 3 列对我来说是最重要的,必须全部填写。由于无法过滤导出的联系人,我编写了一个简单的批处理文件,该文件使用 DELIMS= 循环读取 FOR / F 中的 CSV 输出,忽略前 3 列中没有数据的所有行。 有些行以三个逗号开头(因此有 3 个空列),但第一个标记随后会加载来自第四列的数据。谁能解释一下?

【问题讨论】:

  • 一系列分隔符被处理为只有一个分隔符和行首的分隔符被丢弃。

标签: csv batch-file for-loop


【解决方案1】:

正如已经指出的,FOR /F 命令将连续的分隔符视为单个分隔符。如果所有字段都被引号包围,这将不是问题。现在您理论上可以使用两个 FOR /F 命令来解析 CSV。第一个 FOR /F 会将整行分配给单个标记。然后可以将该标记分配给环境变量,然后您可以使用字符串替换来引用所有空字段。然后将该变量传递给第二个 FOR /F 命令进行处理。

另一种选择是使用第二个批处理文件来解析 CSV 文件。它实际上是由 Dbenham 编写的混合批处理/jscript。它为您完成所有工作。 http://www.dostips.com/forum/viewtopic.php?f=3&t=5702

@echo off
for /f "tokens=1-3 delims=," %%A in ('parseCSV ^<test1.csv') do (
   echo -------------
   echo(A=%%~A
   echo(B=%%~B
   echo(C=%%~C
)

【讨论】:

  • 当一个字段被引号包围时,for /F会将所有个连续的分隔符替换为一个空格,所以字段值变成了修改;例如,for /F "delims=," %L in (""a,,b,c",d") do echo %L 将返回 "a b c" 而不是 "a,,b,c"...
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多