将文件与上次修改的文件进行比较,将 Mod 输出到 .TXT 文件
Compare File Against Last Modified File, Output Mods to .TXT File
我需要在 windows 2003 服务器中创建一个批处理文件。我们确实安装了 Cygwin,因此能够 运行 unix 命令。
每天晚上,一个进程会下载一个带时间戳的文件,FILE*%yyyy%%mm%%dd%.txt到c:\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
我需要在 windows 2003 服务器中创建一个批处理文件。我们确实安装了 Cygwin,因此能够 运行 unix 命令。
每天晚上,一个进程会下载一个带时间戳的文件,FILE*%yyyy%%mm%%dd%.txt到c:\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