Windows批处理:替换CSV文件中的子字符串

时间:2016-02-17 14:02:04

标签: csv batch-file replace

这是Web上的热门话题,但我找不到在CSV文件中进行查找和替换的简单方法。我的CSV文件如下所示:

"0.219530613504834,43.7737904197643,PR RUE D'ARTOIS"
"0.522235882011867,41.7681203998576,PR DE LA FOSSE AU ROI"
"0.039404145384227,44.7565229712732,PR DES PETITS PRES"

我需要在每行的开头和结尾删除双引号。

我尝试了以下脚本:

setlocal enabledelayedexpansion

for /f "tokens=*" %%a in (D:/data.csv) do (
    set temp=%%a
    set temp=%temp:^"=%
)

我的逻辑是将每一行存储在%%a中,并将任何内容替换为双引号。

我用^。

来逃避双引号

这个脚本什么都不做。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

有一个更简单的解决方案可以避免延迟扩展altogther - ~修饰符从FOR变量内容中包含引号。

for /f "delims=" %%a in (D:/data.csv) do echo %%~a

答案 1 :(得分:1)

您的尝试有几个问题:

  1. 您需要使用延迟展开(使用!代替%)。如果没有延迟扩展,变量将在输入循环之前展开。

  2. 使用"delims=""tokens=*"更可靠。使用"tokens=*",每行仍然被标记化,然后所有标记以空格分隔。但令牌最初可能由;分隔。所以,如果你有一个;两个"在输入中你得到的是一两个"在输出中。

  3. 您不需要逃离"

  4. 您需要打印temp,而不是仅使用新值修改它。

    setlocal enabledelayedexpansion
    
    for /f "delims=" %%a in (D:/data.csv) do (
        set temp=%%a
        echo !temp:"=!
    )