[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何根据a.txt中的内容,对很多csv文件中的内容进行替换

有一个a.txt 文件,内容如下,其中的内容如下,和定期需要更新
a.txt
NOID_0_0_8=01979664016F0106
NOID_0_0_7=01979664016F0206
NOID_0_0_6=01979664016F0306
...
很多关系数据,且会定期修改

有很多csv文件
Inspection002_CHIP6_NOID_0_0_6.csv
内容中有“NOID_0_0_6”
Inspection002_CHIP7_NOID_0_0_7.csv
内容中有“NOID_0_0_7”
Inspection002_CHIP8_NOID_0_0_8.csv
内容中有“NOID_0_0_8”
...

需求bat读取a.txt文件,根据等于的关系,替换csv文件中的对应内容
替换后得到的csv文件
Inspection002_CHIP6_NOID_0_0_6.csv
内容中的“NOID_0_0_6”被替换成01979664016F0106
Inspection002_CHIP7_NOID_0_0_7.csv
内容中有“NOID_0_0_7”被替换成01979664016F0206
Inspection002_CHIP8_NOID_0_0_8.csv
内容中有“NOID_0_0_8”被替换成01979664016F0306

子文件夹也会一同处理
  1. @echo off
  2. set "txtFile=a.txt"
  3. for /f "usebackq tokens=1,2 delims==" %%i in ("%txtFile%") do (
  4. for /r %%a in ("*_%%i.csv") do (
  5. echo 处理文件:%%a  替换:%%i --^> %%j
  6. (
  7. for /f "usebackq delims=" %%b in ("%%a") do (
  8. set "line=%%b"
  9. call set "line=%%line:%%i=%%j%%"
  10. call echo %%line%%
  11. )
  12. )>"%%a_NEW"
  13. move /y "%%a_NEW" "%%a" >nul
  14. echo 完成!
  15. echo ------------------------
  16. )
  17. )
  18. pause&exit
复制代码

TOP

回复 2# went


    功能实现了,但就是太慢了,因为csv文件里头有几个亿的数据量,
为了减少数据搜索量,能否定义只搜索csv文件中的第二列(或者指定的列),如下图:

TOP

回复 3# luke2


    每个csv文件都包含几亿行数据吗?单个csv文件大概几GB?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 luke2 于 2020-7-15 22:40 编辑

回复 4# Batcher


  csv文件多,每个csv文件大概45MB,含大概7百万个数据量,一个文件夹有大概40多个G,里头多的有1000个左右的csv文件。
所以请求帮忙,看看看能否实现搜索指定的列内容和进行匹配替换,其他的内容保持不变

TOP

回复 5# luke2


    考虑到数据量非常大,而且需要定期更新,建议考虑导入数据库进行处理。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表