我有一行数据的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
)
答案 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
。