Bat заменить запятую (,) на новую строку и переименовать файл - PullRequest
0 голосов
/ 24 мая 2018

У меня есть CSV-файл с данными в одной строке.Я хочу, чтобы данные после запятой были заменены на следующую строку, а запятая - на двоеточие и переименована в csv в текстовый файл.

Файл 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 голосов
/ 24 мая 2018

Учитывая, что входной файл не содержит кавычек (") и подстановочных знаков (*, ?), и при условии, что все поля из входного 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...