【问题标题】:Split values into separate lines for each delimiter - batch将值拆分为每个分隔符的单独行 - 批处理
【发布时间】:2016-11-02 15:33:48
【问题描述】:

我正在尝试使用 delimiter= 将 csv 文件的值拆分为单独的行,作为拆分点。即

#csv file 
video1,video2,video3
video4,video5,video6

#Preferred output:
video1,
video2,
video3,
ect....

到目前为止我有:

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims=, " %%a in (input.csv) do (
set /a N+=1
echo ^%%a^,>>output.csv
)

但是我遇到了参数 %%a 刚刚作为字符串添加的问题。我将如何对 each 进行拆分,并将字符串放在换行符上?

【问题讨论】:

  • ^ 命令中的插入符号 echo ^%%a^, 无效;为什么要添加它们?
  • 我不知道....*哭泣*
  • 在您的代码中,您可以安全地删除^ 符号。插入符号是 Windows 命令提示符的转义字符,例如。 g.,要回显像> 这样的字符,你需要写echo >...

标签: batch-file split delimiter


【解决方案1】:
@echo off
setLocal 
for /f "delims=" %%a in (input.csv) do (
 for %%i in (%%a) do echo %%i,>>output.csv
)

每一行依次放入%%a

使用默认的列表分隔符(空格、逗号、分号)%%i 依次从%%a%%i 中的行分配每个标记

【讨论】:

  • 太棒了!我快要接近了,不知道如何真正闯入新行。谢谢
  • 我在一个文件(长文件)上测试过,输出文件只包含第一个值
  • @soninob:输出将取决于输入的精确性质。此版本将匹配 OP 的指定数据。请提出您自己的问题,其中包含您的数据的代表性样本。正如你所说,你有一条很长的线,所以你的样本应该显示足够的数据来显示你的问题(例如my_data,doesn't_work)以及你从例程中看到的结果以及你期望看到的结果。
【解决方案2】:

此版本还可以处理空列和包含*? 等内容的列。

@echo off
setLocal EnableDelayedExpansion
for /f "delims=" %%a in (input.csv) do (
    set "line=%%a"
    echo reading line: !line!
    for /F "delims=" %%C in (""!line:^,^=^"^

"!"^") do (
        set "col=%%~C"
        echo   - !col!
    )
)

诀窍在于 ;将替换为"<newline>",并在行首和行尾添加引号。

video1,,video3 将更改为

"video1"  
""
"video3"

%%~C 删除外引号,以检索所需的列内容

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 2014-02-05
    • 2018-11-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多