Windows批处理比较两个路径目录并写出差异

时间:2013-10-24 16:25:34

标签: batch-file compare dir

我想解析一个目录,当新文件出现时,它应该列在另一个批处理的队列中。

我尝试过这样:

@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 个答案:

答案 0 :(得分:1)

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

该程序只管理将新文件添加到上一个树的情况;如果任何文件被删除,它将失败。

答案 1 :(得分:0)

我不确定这与bash有什么关系,因为它看起来像一个Windows批处理文件。如果您只想在开始时按照自己的意思行事,请尝试使用ROBOCOPY仅复制新文件。