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

这样不知行不:
  1. @echo off
  2. set "SN=C3F1052G1 C3F1052G2 C3F1052G3"
  3. findstr "%SN%" a.csv>b.csv
  4. pause
复制代码

TOP

将sn.xlsx复制到文本文件sn.txt中,一行一个sn码。运行下面代码:
  1. findstr /g:sn.txt log.csv>a.csv
复制代码

TOP

TOP

有个思路不知可行不:
由于源文件一行内容太长,可将sn码与源文件中含有sn码的列(可用tokens=15提取)比对,这样可以屏蔽无关的字符。如果某行含有特定的sn码,获得行号。得到所有符合条件的行号后,再按得到的行号提取行。

TOP

回复 1# w31575801
按照25楼的思路,用3个for循环(实际是2个,第3个是为了只显示含有sn码的列,in里面只是一行字符串),不用效率较低的findstr。不知能否提高速度:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (SN.txt) do (
  4.     for /f "delims=" %%b in (需要提取的LOG.csv) do (
  5.         for /f "tokens=15 delims=," %%c in ("%%b") do (
  6.         set "str=%%c"
  7.         set "str=!str:%%a=!"
  8.         if not "!str!"=="%%c" echo %%b
  9.         )
  10.     )
  11. ))>结果.csv
  12. pause
复制代码

TOP

回复 28# WHY
确实有点欠考虑,是会有很大漏洞,并且可能出现的概率也不小。但文本的复杂性太多,有时正则也会失效。
比如这样的字符串:abcd,"a,bcd","a,b"cd,"a,b""c,d","a,b"e"d,e",a"b,c"d
所以写代码时还是要根据文本的实际情况处理。

TOP

csv中带双引号的字段应该是整个字段加引号且本身存在引号的地方加上两个双引号。要表达12"ab"45,应当写成"12""ab""45"

TOP

返回列表