比较文件与上次修改的文件,输出Mods到.TXT文件

时间:2016-03-31 13:24:59

标签: batch-file compare cygwin diff comm

我需要在Windows 2003服务器中创建批处理文件。我们安装了Cygwin,因此可以运行unix命令。

每晚,进程会将带时间戳的文件FILE *%yyyy %% mm %% dd% .txt 下载到 c:\ temp \ download

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

我们要完成的是,在ftping之前,对c:\ temp \ download中的新文件与c:\ temp \ download \ 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&lt;(排序1&gt; c:\ temp \ download \ workpl ease.txt 系统找不到指定的文件。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

现在看来它正在运作。以下是我使用的脚本。随意提出任何增强功能。它涉及对两个文件进行排序,然后对它们运行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