批处理如何读取空标记

时间:2016-11-21 17:21:05

标签: batch-file for-loop cmd

我有下一个批处理文件:

@echo off
setlocal enabledelayedexpansion
set lastpart=

for /F "tokens=2 delims=," %%f in (test.csv) do (
set lastPart= %%f
echo !lastPart!
pause
)

test.csv:

a1,,a3,,a5
b1,b2,b3,b4,b5
,,c3,,
,d2,,d4,
,,,,

我的实际输出是:a3,b2,d2。 输出我需要:空,b2,空,d2,空。 问题是de loop不能读取空标记。有没有属性或东西所以循环不能避免空令牌?循环总是每行必须有5个令牌

由于

1 个答案:

答案 0 :(得分:2)

for /F将连续分隔符视为一个。为避免这种情况,您可以将每个分隔符,替换为",",并将每个完整的行括在""之内,这样每个项目都会显示为"",这很容易最后由~变量的for /F修饰符删除:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "lastpart="

for /F "usebackq delims=" %%L in ("test.csv") do (
    set "LINE=%%L"
    setlocal EnableDelayedExpansion
    set LINE="!LINE:,=","!"
    for /F "tokens=2 delims=," %%F in ("!LINE!") do (
        endlocal
        set "lastpart=%%~F"
        setlocal EnableDelayedExpansion
        echo(!lastpart!
    )
    endlocal
)
endlocal

如果数据本身包含,个字符,则这可能无法正常工作(请记住,如果字段被包含在原始CSV文件中的,内,""不会被视为分隔符)。

延迟扩展的切换是为了不丢失数据中的任何惊叹号。