Home > Blockchain >  Comparing the contents of two recently created folders using Windows Batch file
Comparing the contents of two recently created folders using Windows Batch file

Time:06-16

I'm writing a batch file to compare the contents of two folders on a network drive. A new folder is generated every night by a macro and I want to see what changed between today and yesterday. For example, if yesterday's folder is called "B" and today's folder is "A" and their structure looks like:

- Home
    - A
        - file1.txt
        - file2.txt
        - file4.txt
    - B
        - file1.txt
        - file2.txt
        - file3.txt

I would want to see something like

A: file4.txt added
A: file3.txt removed

But the format of the output doesn't really matter at the end of the day. I just need to see a comparison of the folder's contents.

What I have so far

Using my limited batch knowledge, I've smashed together this currently non-working solution:

@ECHO OFF
setlocal EnableDelayedExpansion
pushd "\\domain\path\to\Home"
set "j=0"
set "count=2"

:: get the names of the two most recently added folders
FOR /f "delims=" %%i IN ('dir /AD-H /B /O-D') DO (
    set /A j=j 1
    if !j! equ 1 (
        :: send contents of newest folder to file
        dir !i! /B > newest_folder.txt
    )
    if !j! equ 2 (
        :: send contents of second-newest folder to file
        dir !i! /B > older_folder.txt
    )
    if !j! geq !count! (
        :: break after two folders
        goto :end
    )
)
:end
fc newest_folder.txt oldest_folder.txt
PAUSE

I saw a similar solution here:

(for %%i in ("folder2\*") do if exist "folder1\%%~nxi" echo(%%~i)>file.csv

But it wouldn't work in my case because the folder names change every day.

Any help would be appreciated!

CodePudding user response:

@ECHO OFF
setlocal EnableDelayedExpansion
set "later="
set "earlier="
pushd "\\domain\path\to\Home"
:: get the names of the two most recently added folders
FOR /f "delims=" %%i IN ('dir /AD-H /B /O-D') DO (
 if defined later set "earlier=%%i"&goto report
 set "later=%%i"
)
:report
if defined earlier (
 dir /b "           
  • Related