Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 DOS批处理文件正在跳过delims_Windows 7_Batch File_Delimited Text - Fatal编程技术网

Windows 7 DOS批处理文件正在跳过delims

Windows 7 DOS批处理文件正在跳过delims,windows-7,batch-file,delimited-text,Windows 7,Batch File,Delimited Text,我正在尝试解析一个文本文件,它的工作原理是不跳过一个空的列。 以下是文件格式: 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

我正在尝试解析一个文本文件,它的工作原理是不跳过一个空的列。 以下是文件格式:

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列,每列由一个制表符分隔

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!
  )
)
我的分析行是:

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
我想要第九栏——即使是空的

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

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

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


编辑

杰布明白了-谢谢

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

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

delim机制的工作方式是将一个或多个连续的delim简化为一个delim,这就是为什么不能以这种方式获得空列

但在您的情况下,似乎很容易用delim和none-delim字符替换delims。
比如:
设置“行=#!行:=#!”

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

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!
  )
)

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