将 2 个文件夹与 .CSV 输出进行批量比较

Posted

技术标签:

【中文标题】将 2 个文件夹与 .CSV 输出进行批量比较【英文标题】:Batch compare 2 folders with .CSV output 【发布时间】:2021-07-20 16:35:56 【问题描述】:

我是批处理新手。我正在尝试比较来自 2 个不同文件夹的内容并将结果输出为 .csv。对比做得很好。但是,当我尝试将结果导出到 2 个不同的 .csv(以便我以后可以合并它们)时,.csv 文件是空的,即使它们不应该。


SET PATH1=C:\Users\ujurado\Desktop\Comp1
SET PATH2=C:\Users\ujurado\Desktop\Comp2

echo %PATH1%
echo %PATH2%

robocopy %PATH1% %PATH2% /L /NJH /NJS /NP /NS
robocopy %PATH2% %PATH1% /L /NJH /NJS /NP /NS

(for %%i in ("%PATH2%\*") do if exist "%PATH1%\%%~nxi" (ECHO(already exists: "%PATH1%\%%~nxi") ELSE ECHO(NOT found "%PATH1%\%%~nxi")>comparaPrimeroConSegundo.csv
(for %%i in ("%PATH1%\*") do if exist "%PATH2%\%%~nxi" (ECHO(already exists: "%PATH2%\%%~nxi") ELSE ECHO(NOT found "%PATH2%\%%~nxi")>comparaSegundoConPrimero.csv

copy comparaPrimeroConSegundo.csv+comparaSegundoConPrimero.csv comparaFinal.csv```

【问题讨论】:

除了您报告的问题。你为什么不直接输出到一个文件开始呢?即从您的第一个for 命令行中删除)>comparaPrimeroConSegundo.csv;然后删除前导(,并在第二个for 命令行上将>comparaSegundoConPrimero.csv 更改为"comparaFinal.csv" 【参考方案1】:

只是一个未经测试的想法,但为什么不尝试单个 robocopy 命令注意: 分隔符是单个 TAB 字符): p>

@Set "PATH1=%UserProfile%\Desktop\Comp1"
@Set "PATH2=%UserProfile%\Desktop\Comp2"
@(For /F "Tokens=2 Delims=  " %%G In ('%SystemRoot%\System32\robocopy.exe "%PATH1%" "%PATH2%" /L /NDL /NJH /NJS /NP /NS /XC /XN /XO') Do @Echo %%G) 1>"comparaFinal.csv"

【讨论】:

只是补充一点,这应该列出每个目录唯一的文件,这是我对意图的假设。我这么说是因为没有必要将Comp1 中存在于Comp2 中的所有文件和Comp2 中存在于Comp1 中的所有文件连接起来,因为这两个列表都是相同的。

以上是关于将 2 个文件夹与 .CSV 输出进行批量比较的主要内容,如果未能解决你的问题,请参考以下文章

For 循环将带有纬度和经度的 .csv 文件与 Dataclass 进行比较

如何通过将csv文件与python中的其他csv文件进行比较来删除和替换csv文件中的列?

比较python中的两个CSV文件并输出

Python:比较 2 个 csv 文件中的 3 列,如果相等则输出

如何批量将csv文件转换成xls文件

如何使用Jmeter批量造数据?