csv - 用批处理替换 csv 文件中的列值
问题描述
我有一个逗号分隔的 csv 文件,如下所示:
ID,USER_ID, COL3_STR, COL4_INT
id1,username1,exampleA, 5
id2,username1,exampleB,0
id3,username2,NULL,-1
id4,username3,,3,false,20
第 2 列 USER_ID 中的每个值都必须替换为testusername(标题“USER_ID”除外)。值不同,因此我无法搜索已定义的字符串。
我的想法是使用 for 循环并从每一行获取第二个令牌以获取用户名。例如:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET currentDir=%~dp0
SET "srcfile=%currentDir%\inputfile.csv"
SET "outfile=%currentDir%\result.csv"
for /f "tokens=2 delims=," %%A IN (%srcfile%) DO (
ECHO %%A)
ECHO done
PAUSE
输出:
USER_ID
username1
username1
username2
username3
因此(新)csv 文件的第二列必须如下所示:
USER_ID
testusername
testusername
testusername
testusername
我看到另一个问题的答案很有帮助。示例:当每个用户名都是“admin”时:
(
for /f "delims=" %%A in (%srcfile%) do (
set "line=%%A"
for /f "tokens=2 delims=," %%B in ("admin") do set "line=!line:%%B=testuser!"
echo !line!
)
)>%outfile%
但这仅适用于已定义的字符串。这是我的第一个批处理脚本,我不知道如何根据我的情况“组合”它。我希望有人能帮助我。必须适用于 Windows 7 和 10。
解决方案
您需要所有令牌(用于编写修改后的文件),而不仅仅是第二个:
for /f "tokens=1,2,* delims=," %%A in (%srcfile%) do echo %%A,testuser,%%C
(其中*
“行的其余部分,未定界”)。%%B
将是用户名,因此只需编写替换字符串。
您可以使用if
语句以不同方式处理第一行,或者单独处理它:
<"%srcfile%" set /p header=
(
echo %header%
for /f "skip=1 tokens=1,2,* delims=," %%A in (%srcfile%) do echo %%A,testuser,%%C
) > "%outfile%"
推荐阅读
- azure - Azure Search Index - Access unretrievable fields in Search Explorer
- cassandra - 在 cassandra 中为用户定义的数据类型字段设置默认未设置值
- python - 替换python中的文本位置
- ag-grid - AG-Grid Enterprise: How to replace Column Menu by community filter
- javascript - 将ajax数据发送到php时未发现错误,但在url中没有localhost的情况下工作
- entity-framework - EF Core - 如何在实体框架核心中启用延迟加载?
- java - 如何在 java se 应用程序中获取托管在服务器上的数据源?
- excel - VBA - Split cells and concatenate parts of
- javascript - ERROR 错误:未捕获(承诺):错误:BrowserModule 已加载:角度 6
- yii - 如何将表单生成器的表单保存到数据库