将文件与上次修改的文件进行比较,将 Mod 输出到 .TXT 文件

Compare File Against Last Modified File, Output Mods to .TXT File

我需要在 windows 2003 服务器中创建一个批处理文件。我们确实安装了 Cygwin,因此能够 运行 unix 命令。

每天晚上,一个进程会下载一个带时间戳的文件,FILE*%yyyy%%mm%%dd%.txtc:\temp\download

然后 FTP 进程将 FTP 它到另一个位置并将文件移动到 c:\temp\download\archived.

我们想要完成的是,在 ftping 之前,将文件与 c:\temp\download 中的新文件与 c:[=39= 中最后修改的文件进行比较]\archived 以便仅 ftp 自上次文件上传以来更改的行。当前日期的 txt 文件应仅包含与前几天不同的行。

我有运行以下脚本成功排序和比较两个文件:

@echo on
set archive=C:\temp\download\archived
set download=C:\temp\download\
pushd "%archive%"
for /f "tokens=*" %%G in ('dir *.txt /b /a-d /od') do SET oldfile=%%G
pushd "%download%"
for /f "tokens=*" %%H in ('dir *.txt /b /a-d /od') do SET newfile=%%H
echo The last file processed was %oldfile%
echo The new file is %newfile%
comm -2 -3 <(sort %archive%\%oldfile%) < (sort %download%\%newfile%) >             %download%\%newfile%
pushd "%download%"
popd

脚本在没有排序的情况下工作,但一旦添加,脚本就会失败。

运行 comm -2 -3 %archive%\%oldfile% %download%\%newfile% 有效,但添加排序时不起作用,与错误:

comm -2 -3 C:\temp\download\archived\CPSNS_20140527075503.txt) C:\temp\download\CPSNS_20140602075502.txt) 0<(排序 1>c:\temp\download\workpl ease.txt 系统找不到指定的文件。

如有任何帮助,我们将不胜感激!

看起来它现在可以正常工作了。下面是我使用的脚本。随时提出任何改进建议。它涉及对两个文件进行排序,然后 运行 COMM 针对它们进行排序,并且仅输出在 %newfile% 与 %oldfile% 中发生更改的行。

@echo on
set archive=C:\temp\download\archived
set download=C:\temp\download\
pushd "%archive%"
for /f "tokens=*" %%G in ('dir *.txt /b /a-d /od') do SET oldfile=%%G
pushd "%download%"
for /f "tokens=*" %%H in ('dir *.txt /b /a-d /od') do SET newfile=%%H
echo The last file processed was %oldfile%
echo The new file is %newfile%
sort %archive%\%oldfile% > tmp && mv tmp %download%\%oldfile%
sort %download%\%newfile% > tmp && mv tmp %download%\%newfile%
comm -2 -3 %download%\%newfile% %download%\%oldfile% > tmp && mv tmp     %download%\%newfile%
pushd "%download%"
del %oldfile%
popd