Question

I have the below code which someone gave to me but I don't know how to put it together in a bat file so it runs successfully.

The aim is to find the latest (last modified) file in c:/ and compare it with c:/2.txt and output the differences into c:/786.txt

 cd /d c:\
 for /f %%a in ('dir /b /o-d /a-d /tw') do (set latest=%%a & goto :eof)

 for /f "tokens=1*" %%a in (
  'diff c:\%latest% c:\2.txt ^| findstr /r /c:"^<" /c:"^>"'
 ) do @echo %%b >>c:\786.txt

Can someone please put this code together for me.

Was it helpful?

Solution

cd /d c:\
set "latest="
for /f %%a in ('dir /b /o-d /a-d /tw') do (set "latest=%%a" & goto :found)
:found
if not defined latest exit /b
for /f "tokens=1,*" %%a in (
    'diff "c:\%latest%" "c:\2.txt" ^| findstr /r /c:"^<" /c:"^>"'
) do (
    >> "c:\786.txt" echo(%%b
)

Ordering by date descending, the latest file is the first, so on first iteration assign the file name and exit of the for loop.

Then check if any file has been found. It not, end of the script

If we have a file, compare latest file against the indicated one and send the filtered lines to the final file.

EDIT - Refactor code to made it more usable and adapt to comments. Search for last file in folder moved to a subroutine.

@echo off

    setlocal enableextensions disabledelayedexpansion

    call :getLatestFileInFolder "c:\" latestC
    call :getLatestFileInFolder "d:\" latestD

    if not defined latestC ( echo NO File in C & exit /b )
    if not defined latestD ( echo NO File in D & exit /b )

    for /f "tokens=1,*" %%a in (
        'diff "%latestC%" "%latestD%" ^| findstr /r /c:"^<" /c:"^>"'
    ) do (
        >> "c:\786.txt" echo(%%b
    )

    endlocal
    exit /b

:getLatestFileInFolder folderToSearch variableToReturn
    setlocal
    set "folder=%~1" & if not defined folder set "folder=%cd%"
    set "latest="
    pushd "%folder%"
    for /f "tokens=*" %%a in ('dir /b /o-d /a-d /tw 2^>nul') do (set "latest=%%~fa" & goto :latestFileFound)
    :latestFileFound
    popd
    endlocal & set "%~2=%latest%" & goto :eof
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top