批处理:使用特定的管道分隔符将值拆分为单独的一行



我正在尝试创建一个报告,该报告将为每一行拆分为下一行。我的数据:

I,have,a,report,to,split,|,into,next,row
my,second,line,should,also,|,split,like,before

那么它应该是这样的:

I,have,a,report,to,split
into,next,row
my,second,line,should,also
split,like,before

我试过这个脚本:

@echo off
setLocal
for /f "tokens=1 delims=.|" %%a in (input.csv) do echo %%a
for /f "tokens=2 delims=.|" %%a in (input.csv) do echo %%a

但结果是:

I,have,a,report,to,split
my,second,line,should,also
into,next,row
split,like,before

有人能帮我吗?提前感谢…

您的结果示例是错误的。这是您代码的输出:

I,have,a,report,to,split,
my,second,line,should,also,
,into,next,row
,split,like,before

注意第1行和第2行末尾以及第3行和第4行开头的逗号

这种方法有效:

@echo off
setlocal EnableDelayedExpansion
rem Define a variable with CR+LF ASCII chars:
for /F %%a in ('copy /Z "%~F0" NUL') do set CRLF=%%a^
%empty line 1/2%
%empty line 2/2%
rem Change each ",|," string by CR+LF characters
for /F "delims=" %%a in (input.csv) do (
set "line=%%a"
for %%N in ("!CRLF!") do echo !line:,^|,=%%~N!
)

当然,您也可以使用"传统">:/方式:

@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1,2 delims=|" %%a in (input.csv) do (
set "left=%%a"
set "right=%%b"
echo !left:~0,-1!
echo !right:~1!
)

最新更新