我需要在 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<(sort 1>c:\temp\download\workplease.txt 系统找不到指定的文件。
任何帮助将不胜感激!