2016-03-31 4 views
0

Ich habe eine Anforderung zum Erstellen einer Batch-Datei in Windows 2003 Server. Wir haben Cygwin installiert und können Unix-Befehle ausführen.Datei gegen zuletzt geänderte Datei vergleichen, Ausgabe Mods zu .TXT-Datei

Jede Nacht wird ein Verfahren zur Herstellung einer timestamped Datei herunterladen,% yyyy FILE * %% mm %% dd% .txt zu c: \ temp \ download.

Ein FTP-Prozess wird dann FTP an einen anderen Speicherort und verschieben Sie die Datei auf c: \ temp \ download \ archiviert.

Wir versuchen, vor dem ftping einen Dateivergleich mit der neuen Datei in c: \ temp \ download gegen die zuletzt geänderte Datei in c: \ temp \ download \ archived durchzuführen, um nur ftp zu erstellen Zeilen, die seit dem letzten Hochladen der Datei geändert wurden. Die aktuelle txt-Datei sollte nur Zeilen enthalten, die sich von den vorherigen Tagen unterscheiden.

Ich habe das folgende Skript mit Erfolg laufe zwei Dateien zu sortieren und vergleichen:

@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 

Das Skript ohne die Art funktioniert, aber sobald die hinzugefügt wird, das Skript fehlschlägt.

Lauf comm -2 -3% Archiv% \% oldfile%% Download% \% newfile% funktioniert, aber bei der Zugabe, die Art nicht, mit dem Fehler:

comm -2 -3 C : \ temp \ download \ archived \ CPSNS_20140527075503.txt) C: \ temp \ download \ CPSNS_20140602075502.txt) 0 < (Sortieren 1> c: \ temp \ download \ workpl ease.txt Das System kann die angegebene Datei nicht finden

Jede Hilfe wäre sehr willkommen!

+0

Das 'yyyy' ist 2014? Ist das die Vergangenheit? btw, 'findstr/v/G:" prevDay "/ F:" curDay ">" diff.log "' sollte die Differenzen von 'prevDay' und' curDay' in 'diff.log' ausgeben. Umbenennen nach Belieben Datei mit der höchsten Nummer in ihrem Namen als "curDay" und die zweithöchste als "prevDay". – Bloodied

Antwort

0

Es sieht aus wie es jetzt funktioniert. Unten ist das Skript, das ich benutzt habe. Fühlen Sie sich frei, irgendwelche Verbesserungen vorzuschlagen. Dazu werden beide Dateien sortiert, COMM wird dann gegen sie sortiert, und es werden nur Zeilen ausgegeben, die sich in%% newfile% und%% oldfile% geändert haben.

@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 
Verwandte Themen