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标签