【问题标题】:Batch comparing 2 differents csv files批量比较 2 个不同的 csv 文件
【发布时间】:2017-10-20 08:17:16
【问题描述】:

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

我有 2 个 CSV 文件要比较:

第一个是这样的:

"姓名","PrimarySmtpAddress","EmailAddresses"

第二个是这样的:

"名称","$_.TotalItemSize.Value.ToMB()"

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

我希望有一个文件作为输出,其中包含第一个文件中的所有数据,但 "$_.TotalItemSize.Value.ToMB()" 添加了每个文件的末尾行。

例如,它会做类似

"Name","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 不起作用

【问题讨论】:

  • 不擅长编写脚本并不能免除你做一些研究和展示一些努力的责任!注意 StackOverflow 不是免费的代码/脚本编写服务!请阅读tour 并在此处了解How to Ask
  • 我没有让别人帮我做,如果看起来像我做的,对不起。我发现了多个主题,人们只想比较这条线是否相等,在我的情况下,它们从来都不一样。只有第一个字段匹配
  • 可能很有用,但我仍然对 if 有一些问题

标签: csv batch-file


【解决方案1】:

对于 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
 )
)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多