csv - 需要使用批处理脚本替换 CSV 文件中的特定文本
问题描述
我想替换特定列中 CSV 文件中的特定文本。我可以使用旧帖子来做到这一点。但是当我的 CSV 数据包含空间时,该代码不起作用。我不是批处理脚本专家,所以我无法修复它。我尝试了很多东西。
@echo off
setlocal enabledelayedexpansion
set inputCSV=TestCSV.csv
set outputCSV=TestCSV2.csv
(for /f "tokens=*" %%a IN (%inputCSV%) DO (
set column=0
set "line="
for %%i in ( %%a ) do (
set /a column+=1
set value=%%~i
if !column!==4 (
if "!value!"=="TEST" set "value=abc"
)
set "line=!line!,"!value!""
)
echo !line:~1!
))>%outputCSV%
ID,Name,Date,Field1,Test Data Space Check
1010101,Test 1,01/27/2001 10:00:00 PM,TEST,Test Data Space Check
2020202,Test 2,01/27/2001 10:00:00 PM,TEST,Test Data Space Check
3030303,Test 3,01/27/2001 10:00:00 PM,TEST,Test Data Space Check
4040404,Test 4,01/27/2001 10:00:00 PM,TEST,Test Data Space Check
5050505,Test 5,01/27/2001 10:00:00 PM,TEST,Test Data Space Check
我也试过这个,但没有用。
@echo off
setlocal enabledelayedexpansion
set inputCSV=TestCSV.csv
set outputCSV=TestCSV2.csv
:: tokens=*
(for /f "tokens=*" %%a IN (%inputCSV%) DO (
set column=0
set "line="
for /f "delims=," %%i in ( %%a ) do (
set /a column+=1
set value=%%~i
if !column!==4 (
if "!value!"=="TEST" set "value=ABC"
)
set "line=!line!,"!value!""
)
echo !line:%%a!
))>%outputCSV%
解决方案
从您的 excel 图像来看,您使用的编辑器中的 BOM(字节顺序标记)似乎也存在问题。
您引用的旧帖子不同,因为所有字段都被引用。
要在逗号处拆分 csv,请在 for /f 中使用逗号作为分隔符(前提是字段数据中没有逗号)。
要交换文本,请使用字符串替换(需要复制到代码块内的常规(非元)变量,而这又需要延迟扩展)。
这批:
:: Q:\Test\2019\01\22\SO_54312302.cmd
@echo off
setlocal enabledelayedexpansion
set inputCSV=TestCSV.csv
set outputCSV=TestCSV2.csv
(for /f "tokens=1-4* delims=," %%a IN (%inputCSV%) DO (
set "col4=%%d"
set "col4=!col4:foo=bar!"
Set "col4=!col4:test=abc!"
echo %%a,%%b,%%c,!col4!,%%e
))>%outputCSV%
产生这个输出:
> type TestCSV2.csv
ID,Name,Date,Field1,Test Data Space Check
1010101,Test 1,01/27/2001 10:00:00 PM,abc,Test Data Space Check
2020202,Test 2,01/27/2001 10:00:00 PM,abc,Test Data Space Check
3030303,Test 3,01/27/2001 10:00:00 PM,abc,Test Data Space Check
4040404,Test 4,01/27/2001 10:00:00 PM,abc,Test Data Space Check
5050505,Test 5,01/27/2001 10:00:00 PM,abc,Test Data Space Check
在 Excxel 中导入时,使用逗号作为分隔符。
推荐阅读
- java - 删除 PickList AdaptiveTrackSelection 中的 None 选项
- mule - 了解匹配运算符
- google-app-engine - 前端时间与数据存储读取的比率是否合适?
- tensorflow - 在没有 sudo 的远程 PC 上安装 Tensorflow gpu
- javascript - Create fontawesome icon inside a span
- css - 角形材质迷你按钮周围显示一些正方形
- javascript - 如何将 JSON 对象获取到 React 组件?
- python - 如何将json转换为数据框
- javascript - 在使用 For 循环 JS 中分配变量
- python - 没有传入时如何避免“1”