首页 > 解决方案 > 批处理文件操作csv并用mysql导入

问题描述

我正在尝试将 a 导入CSVmySQLusing Batch script。导入csvto的部分可以mysql工作,但如果csv文件包含空字段(如苹果、香蕉、猕猴桃),则它不能正常工作。

所以我想要做的是事先操作 csv 文件以便替换,,, ,. 我试图在网上找到一些代码来实现这一点,因为这是我的第一个Batch script,但它不起作用。

这是我的Batch script

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=,,"
    set "replace=, ,"

    set "textFile=eform.csv"

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )
@echo on
C:\xampp\mysql\bin\mysqld
C:\xampp\mysql\bin\mysql -u root -p kepdb_db < infile.sql
pause

如果此脚本有效,然后如果 csv 文件包含 3 个连续的空字段 ->apple,,,,banana那么它将被转换为 ->apple, , , ,bananaapple, ,, ,banana??

标签: mysqlwindowscsvbatch-filecmd

解决方案


插入行:

set "line=!line:%search%=%replace%!"

就在该行之前:

>>"%textFile%" echo(!line:%search%=%replace%!

由于使用的子字符串替换功能从左到右扫描字符串以进行替换,因此已经处理的字符不会参与进一步的替换。因此,因为第二个已经被前一个替换处理了,所以第三个是独立的,,,。出于同样的原因变成,依此类推。因此,您必须进行第二次扫描和更换。, ,,,,,,,, ,, ,

请注意,当任何字段值包含,它们自己的序列时,这可能会产生意想不到的结果(当值被引用时可能会发生这种情况,例如apple,"ora,,nge",,,banana; 这将被修改为,apple,"ora, ,nge", , ,banana因为不考虑引用,尽管apple,"ora,,nge", , ,banana这是正确的)。


推荐阅读