Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Windows批比较两个路径目录并写出差异_Batch File_Compare_Dir - Fatal编程技术网

Batch file Windows批比较两个路径目录并写出差异

Batch file Windows批比较两个路径目录并写出差异,batch-file,compare,dir,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%

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

我是这样试的:

@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

有人能帮我吗?

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

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
@echo关闭
setlocal EnableDelayedExpansion
设置ftpdir=Z:\FTP\home\
设置xdir=Z:\NewDir\
设置vtree=v.txt
设置vtreecomp=vcomp.txt
:开始
如果不存在%vtree%dir%ftpdir%/S/B>%vtree%
:VCOMPTREE
目录%ftpdir%/S/B>%vtreecomp%
fc%vtree%%vtreecomp%>num
如果错误级别为1(
设置“vtreline=”
<%vtree%(
对于/F“delims=“%a in(%vtreecomp%)do(
如果未定义vtreeLine set/P vtreeLine=
如果“!vtreline!”相等“%%a”(
设置“vtreline=”
)否则(
回声%%a
)
))>queue.txt
出口
)
开始

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

我不知道这个comand。但有一个问题。文件应复制到的目录具有其他结构。ROBOCOPY似乎只镜像了两个目录,不能给我一个更改列表。包含差异的文件应该像其他批处理(复制批处理)的队列一样工作。是的,只有windows批处理(键入错误)。robocopy源目标/l/mir/fp/ns/nc/ndl/njh/njsperfect!这正是我想要的。非常感谢。你是个天才:)