Bat将逗号(,)替换为新行并重命名文件

时间:2018-05-24 12:39:37

标签: batch-file

我有一行数据的csv文件。我希望将逗号后的数据替换为下一行,并将逗号重命名为冒号并将csv重命名为txt文件。

档案text.csv

Mn4pr,SS60S,P4NPR,F4NPR,K4NPR,T4NPR

期望的输出:

M4NPR; 
SS60S;
P4NPR;

我无法让新线字符工作。

批处理脚本:

@ECHO OFF
 FOR %%I IN ("D:\path\to\files\text.csv") DO (
 SET "ext=%%~xI"
 SETLOCAL EnableDelayedExpansion
 set "line="
 for /F "delims=" %%a in (text.csv) do set "line=!line ;%%a"
 RENAME "%%I" "%%~nI!ext:~1!.csv"
 ENDLOCAL
                        )

1 个答案:

答案 0 :(得分:1)

假设输入文件不包含引号(")和通配符(*?),并假设输入CSV文件中的所有字段都是转移到未经编辑的输出TXT文件,以下代码可能适合您:

@echo off
> "text.txt" (
    for /F usebackq^ delims^=^ eol^= %%L in ("text.csv") do (
        set "LINE=%%L"
        setlocal EnableDelayedExpansion
        for %%I in ("!LINE:,=" "!") do (
            endlocal
            echo(%%~I;
            setlocal EnableDelayedExpansion
        )
        endlocal
    )
)
REM del "text.csv"

内部for循环在每,分割该行。换行符由echo隐式插入。

以下是一种替代方法,不使用for /F,而是输入重定向<set /P来读取CSV文件的单行:

@echo off
< "text.csv" > "text.txt" (
    setlocal EnableDelayedExpansion
    set "LINE=" & set /P LINE=""
    if defined LINE (
        for %%I in ("!LINE:,=" "!") do (
            endlocal
            echo(%%~I;
            setlocal EnableDelayedExpansion
        )
    )
    endlocal
)
REM del "text.csv"

顺便说一下,要删除原始CSV文件,请删除REM命令行前面的del