我在互联网上找不到任何东西,所以我需要你的帮助。
我有两个我想比较的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无法正常工作
答案 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
)
)
将跳过不在两个文件中的名称。