Чем и как копировать файлы при появлении их в папке?
к стыду своему недавно для себя открыл 
robocopy
robocopy /?
/MON:n :: Наблюдать за источником; перезапустить после n изменений.
/MOT:m :: Наблюдать за источником; перезапустить через m минут, если произошли изменения.
/MOV :: Перемещать файлы (удаление из источника после копирования).
/MOVE :: Перемещать файлы и папки (удаление из источника после копирования).
/LOG:файл :: Записывать состояние в файл журнала (перезаписывать существующий журнал).
/LOG+:файл :: Записывать состояние в файл журнала (добавлять к существующему журналу).
хелп из 10-ки. в 7-ке (и 2008 R2 сервере) процитированный функционал есть.
Можно поставить в планировщик на старт системы.
Что синхронизировать а что пропускать отлично настраивается.

Еще в апреле я бы посоветовал вам переписать скрипт на Powershell  под свои нужды ) - скрипт более недоступен, для использования функционала filesystemwatcher пишите свой, на основе вот этой статьи https://devblogs.microsoft.com/powershell-communit...
1.По уму - научить принимающую программу после обработки файлов не удалять их, а перекладывать в каталог обработанных файлов.
2.вызов второй программы осуществлять например из батника, в котором перед запуском программы 1.проверяется наличие файлов в каталоге, 2.копируются файлы в архивный каталог, 3.запускается программа.
3.Если вызов второй софтины нельзя запихнуть в батник (например, она должна постоянно работать), то остается только в шедулере каждую минуту/секунду запускать батник, копирующий файлы в архивный каталог. Это самый плохой вариант - возможна потеря файлов при одновременном доступе к файлу.
Вообще нужно знать подробнее о возможностях программ. Тогда можно дать более конкретный ответ.
И кстати остается вопрос - как синхронизируются между собой 1 и 2 программы? Может быть случай, когда 1 программа еще не дописала файл, а 2 уже начала его обработку. Если у вас еще такого не было, то обязательно будет!