【问题标题】:DOS batchfile is skipping FOR delimsDOS 批处理文件正在跳过 FOR delims
【发布时间】:2011-09-23 07:35:18
【问题描述】:

我正在尝试解析一个文本文件,如果它是空的,它除了跳过一列之外,它正在工作。 这是文件格式:

206695844   66583369    L   CAT 1   1   4144042 214857      64378180    L   4144039 214853  Y
206669467   127810625   R   CAT 38  1   4136724 213413      724749204   R   4136727 213420  Y
206445106   65588013    L   CAT 4   1   4139084 210381      64363708    L   4139082 210372  Y

                                                         ^
                                                    empty column

如您所见,共有 14 列,每列由制表符分隔。

我的解析行是:

FOR /F "tokens=1,2,5,7,8,9" %%i in (datafile.txt) DO (
   echo %%i %%j %%k %%l %%m %%n >> outputDatafile.txt
)

问题是它跳过了第 9 列(示例中为空白),而是使用第 10 列,如下所示:

206695844   66583369    1   4144042 214857  64378180

想要第 9 列 - 即使是空的!

我也尝试使用显式制表符作为分隔符,因为 FOR 的帮助说:

delims=xxx
- 指定分隔符集。这将替换默认分隔符集的空格和制表符

FOR /F "tokens=1,2,5,7,8,9* delims= " %%i in (datafile.txt) DO (
                                   ^tab

我做错了什么?


编辑

jeb 知道了 - 谢谢!

要将结果吐出到我的文件中,我只需使用:

echo (!col1!%tab%!col2!%tab%!col3!%tab%!col4!%tab%!col5!%tab%!col6!) >> outputFile.txt

【问题讨论】:

  • 你真的在使用 MS-DOS 吗? FOR /F 仅在“批处理语言”的现代 Windows 实现中受支持
  • 啊,好吧,可能是个好点。这是在 Win 7 上的 cmd shell 中运行的。这是一种新的风格,是吗?我应该删除标签吗?
  • 我删除了标签并添加了 Windows-7 标签

标签: windows-7 batch-file csv


【解决方案1】:

delim 机制的工作原理是将一个或多个连续的 delim 减少为单个 delim,这就是为什么您不能以这种方式获得空列的原因。

但在您的情况下,用 delim 和非 delim 字符替换 delims 似乎很容易。
喜欢: set "line=#!line:<TAB>=<TAB>#!"

然后每列都以# 为前缀,因此您甚至可以获得“空”列。
您只需要始终删除第一个字符。

setlocal EnableDelayedExpansion
set "tab=   "
FOR /F "delims=" %%L in (datafile.txt) DO (
  set "line=%%L"
  set "line=#!line:%TAB%=%TAB%#!"
  for /F "tokens=1,2,5,7,8,9 delims=%TAB%" %%1 in ("!line!") DO (
    echo %%1, %%2, %%3,  %%4, %%5, %%6
    set "col1=%%1"
    set "col1=!col1:~1!"
    echo(!col1!
  )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2014-11-09
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多