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

Windows のバッチ ファイルのように見えるため、これが bash とどのように関連しているかはわかりません。最初に言ったことだけを実行したい場合は、ROBOCOPY を使用して新しいファイルのみをコピーしてみてください。

于 2013-10-24T16:44:46.543 に答える