将 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文件中的列?