@echo off :: usage: ifchange target temporary if "%1" == "" goto :end set dest=%1 set src=%2 set dest=%dest:/=\% set src=%src:/=\% if not "%dest%" == "" if not "%dest%" == "%%dest:/=\%%" goto :nt if not exist %2 goto :end :: check if fc.exe works. echo foo > conftst1.tmp echo bar > conftst2.tmp fc.exe conftst1.tmp conftst2.tmp > nul if not errorlevel 1 goto :brokenfc del conftst1.tmp > nul del conftst2.tmp > nul :: target does not exist or new file differs from it. if not exist %1 goto :update fc.exe %1 %2 > nul if errorlevel 1 goto :update :unchange echo %1 unchanged. del %2 goto :end :brokenfc del conftest1.tmp > nul del conftest2.tmp > nul echo FC.EXE does not work properly. echo assuming %1 should be changed. :update echo %1 updated. :: if exist %1 del %1 dir /b %2 copy %2 %1 del %2 goto :end :nt if not exist %src% goto :end if exist %dest% ( fc.exe %dest% %src% > nul && ( echo %dest% unchanged. del %src% goto :end ) ) echo %dest% updated. copy %src% %dest% > nul del %src% :end