【发布时间】:2014-11-06 21:50:42
【问题描述】:
我有 2 个文件夹(目录 A 和目录 B),其中包含 .csv 文件形式的相同财务报告,但具有可能不同的值。
我正在尝试通过删除相同的报告来协调这些报告,但我也在尝试编写一个执行比较的.bat 文件,此外,根据 if 将相应的文件转移到其他文件夹该特定文件是否存在差异。
我希望 .bat 文件:
- 遍历目录 A 中的每个文件
- 对于每个文件,将其与目录 B 中的对应文件进行比较 (COMP)(文件名将相同)
- 如果没有差异 - 将文件分别从目录 A 和目录 B 移动 (MOVE) 到目录 C 和目录 D。
- 如果存在差异 - 什么也不做;将文件留在目录 A 和 B 中,然后继续循环
我的程序看起来有点像这样(显然不完整):
@echo off
:Main
FOR /D %%X ("C:\youl\dirA") DO COMP %%X C:\youl\dirB
IF ERRORLEVEL 0 GOTO Next1
:Next1
Copy C:\youl\dirA C:\youl\dirB
显然,就我的目的而言,这是一段非常可怕且无法操作的代码。
任何帮助将不胜感激!
从 npocmaka 的代码更新:
@echo off
Setlocal enableDelayedExpansion
set "dirA=c:\users\youl\automation\binarycheck\A\*.csv"
set "dirB=c:\users\youl\automation\binarycheck\B\*.csv"
set "dirC=c:\users\youl\automation\binarycheck\C\"
for /f "tokens=* delims=" &&a in ("%dirA&") do (
fc /b "%%a" "%dirB%" >nul 2>&1 && (
move "%%a" "%dirC%"
)
)
endlocal
【问题讨论】:
-
你要递归遍历还是平面遍历?
-
我自己也在尝试解决这个问题,但我没有完全的时间特权,因为我需要很快找到解决方案。我可以让 FOR 循环工作,这是我的条件“MOVE”被破坏,因为它将整个程序视为一个(即文件集)而不是查看每个文件级别的 ERRORLEVEL。因此,要么我的所有文件都被移动,要么没有,这不是我想要完成的。
-
不确定 npocmaka - 实际上它都在同一个驱动器上。抱歉,在引用 dir A 和 dir B 时,我应该更清楚地说我是在谈论简单的 Windows 文件夹
-
您的
errorlevel问题很简单。if errorlevel n表示如果错误级别为 n 或大于 n。因此if errorlevel 0是,除非在特殊情况下,总是正确的。要测试 0,请使用if not errorlevel 1。
标签: windows loops batch-file compare