Пакетное сравнение Windows двух каталогов пути и запишите разницу

Я хочу проанализировать каталог, и когда появятся новые файлы, он должен быть указан в очереди для другого пакета.

Я попробовал это так:

@echo off
:START
set ftpdir=Z:\FTP\home\
set xdir=Z:\NewDir\
set vtree=v.txt
set vtreecomp=vcomp.txt

if not exist %vtree% (dir %ftpdir% /S/B > %vtree%) else ( goto VCOMPTREE )
exit

:VCOMPTREE
dir %ftpdir% /S/B > %vtreecomp%
fc %vtree% %vtreecomp% > nul
if errorlevel 1 fc %vtree% %vtreecomp% >> queue.txt & exit 
goto START

Но я не понимаю только разные строки. Что я получаю:

Vergleichen der Dateien v.txt und VCOMP.txt
***** v.txt
Z:\FTP\home\22.10.2013 #111
Z:\FTP\home\23.10.2013 #222
***** VCOMP.txt
Z:\FTP\home\22.10.2013 #111
Z:\FTP\home\22.10.2013 #111 - Kopie
Z:\FTP\home\23.10.2013 #222
*****

***** v.txt
***** VCOMP.txt
Z:\FTP\home\23.10.2013 #222 - Kopie
*****

Что я хочу:

Z:\FTP\home\22.10.2013 #111 - Kopie
Z:\FTP\home\23.10.2013 #222 - Kopie

Может ли кто-нибудь помочь мне с этим?

2 ответа

Решение

fc выходные данные команды показывают различия в наборах, которые включают первую и последнюю равные строки. Если вы хотите получить только разные строки, вы должны сами сравнить файлы. Пакетная программа ниже делает это:

@echo off
setlocal EnableDelayedExpansion

set ftpdir=Z:\FTP\home\
set xdir=Z:\NewDir\
set vtree=v.txt
set vtreecomp=vcomp.txt

:START
if not exist %vtree% dir %ftpdir% /S/B > %vtree%

:VCOMPTREE
dir %ftpdir% /S/B > %vtreecomp%
fc %vtree% %vtreecomp% > nul
if errorlevel 1 (
   set "vtreeLine="
   < %vtree% (
   for /F "delims=" %%a in (%vtreecomp%) do (
      if not defined vtreeLine set /P vtreeLine=
      if "!vtreeLine!" equ "%%a" (
         set "vtreeLine="
      ) else (
         echo %%a
      )
   )) > queue.txt
   exit
)
goto START

Эта программа просто управляет случаем, когда новые файлы добавляются в предыдущее дерево; он потерпит неудачу, если какой-либо файл будет удален.

Я не уверен, как это связано с bash, потому что это похоже на пакетный файл Windows. Если вы хотите делать только то, что говорите в начале, попробуйте использовать ROBOCOPY только для копирования новых файлов.

Другие вопросы по тегам