批量比较2个不同的csv文件

时间:2017-10-20 08:17:17

标签: csv batch-file

我在互联网上找不到任何东西,所以我需要你的帮助。

我有两个我想比较的CSV文件:

第一个就像:

“名称”, “PrimarySmtpAddress”, “EmailAddresses”

第二个就像:

“名称”, “$ _。TotalItemSize.Value.ToMB()”

输出文件必须显示第一个和第二个文件中的名称

我希望输出一个包含第一个文件中所有数据但带有“$ _。TotalItemSize.Value.ToMB()”的文件作为输出。线。

例如

“名称”, “PrimarySmtpAddress”, “EmailAddresses”, “$ _。TotalItemSize.Value.ToMB()”,

我一定不太清楚,因为我的英语并不完美。 你能帮我吗?我不太擅长脚本。 非常感谢你。

编辑:

REM @echo off
setlocal enabledelayedexpansion
set var1
set var2

for /f "tokens=1 delims=," %%A in (file2.txt) do (
   set var1=%%A
   echo %var1%

   for /f "tokens=1 delims=," %%B in (file1.txt) do (
      set var2=%%B
      echo %var2%
      if ("%var1%"=="%var2%")
      (
         echo equal var
      )
      else
      (
         echo not equal var
      )
   pause
   )
)
pause

看起来IF无法正常工作

1 个答案:

答案 0 :(得分:0)

对于1.csv中的每一行,在2.csv中查找名称并打印组合行 REGEX可能看起来有点奇怪,它是:

/rc:r =使用正则表达式,c: =使用字符串(必要时,因为可能有空格)
^:“字符串开头”
\":文字"
%%~a:没有引号的名称
/":另一个文字"
,:文字,(可选)

"tokens=1,* delims=,"表示“将第一个标记放入%%m,其余所有标记放入%%n

注意:没有IF。它被findstr取代,它只提取你需要的那条线。

注意:大文件可能会很慢(2.csv被多次读取(与1.txt中的行一样多))

@echo off 
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=," %%a in (1.csv) do (
 for /f "tokens=1,* delims=," %%m in ('findstr /rc:"^\"%%~a\"," 2.csv') do (
  echo %%a,%%b,%%n
 )
)

将跳过不在两个文件中的名称。