0

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

我是这样尝试的:

@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

有人可以帮我吗?

4

2 回答 2

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

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

于 2013-10-24T17:54:09.200 回答
0

我不确定这与 bash 有什么关系,因为它看起来像一个 Windows 批处理文件。如果您只想按开头说的做,请尝试使用 ROBOCOPY 仅复制新文件。

于 2013-10-24T16:44:46.543 回答