FOR循环文件夹中的每个文件,并在BAT文件中执行COMP + MOVE

时间:2014-11-06 21:50:42

标签: windows loops batch-file compare

我有2个文件夹(目录A和目录B),它们包含.csv个文件形式的相同财务报告,但可能不同的值。

我试图通过废除相同的报告来协调这些报告,但我也尝试编写执行比较的.bat文件,此外,将相应的文件转移到其他文件夹条件如果发现特定文件存在差异,请执行此操作。

我希望.bat文件:

  1. 遍历dir A中的每个文件
  2. 对于每个文件,将(COMP)与其在dir B中的等效文件进行比较(文件名将相同)
  3. 如果没有差异 - 将文件从目录A和目录B移动(移动)到目录C和目录D。
  4. 如果有差异 - 什么都不做;将文件保留在目录A和B中,然后继续循环
  5. 我的程序看起来像这样(显然不完整):

    @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
    

1 个答案:

答案 0 :(得分:0)

未经测试!

@echo off

setlocal enableDelayedExpansion
set "dirA=c:\dir1"
set "dirB=c:\dir2"

for /f "tokens=* delims=" %%a in ('dir /b /s /a:-d "%dirA%"') do (
        set "path1=%%~pa"
        set "path2=!path1:%dirA%=%dirB%!"
        fc /b "%%~fa" "%%~da!path2!%%~nxa" >nul 2>&1 && (
            move "%%~fa" "%%~da!path2!%%~nxa"
        )
)

endlocal

假设您需要递归检查,dirAdirB位于同一个驱动器上...