【发布时间】:2021-10-14 23:02:40
【问题描述】:
我有一个逗号分隔的 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
第二列 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
我看到another question 和一个有用的answer。 示例:当每个用户名都是“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。
【问题讨论】:
-
"admin"中没有第二个令牌,因此没有任何内容被替换。当您将"admin"替换为"%%A"时,它可能会起作用。但另一方面,您不需要提取用户名 - 无论如何都将其丢弃(请参阅我的答案以获得更直接的解决方案)。
标签: csv batch-file