我有下一个批处理文件:
@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个令牌
由于
答案 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文件中的,
内,""
不会被视为分隔符)。
延迟扩展的切换是为了不丢失数据中的任何惊叹号。