{title}

Liberty Media verklagt HotfileDieser Artikel wurde am 8. Februar 2011 auf CNET veröffentlicht. Er trägt den Titel "MPAA verklagt Hotfile".

Stapelskript zum Untersuchen von Datensatzdaten

ExpertenIch bin neu in der Stapelprogrammierung und brauche hier Hilfe. Ich suche ein Stapelskript für folgende Aufgabe. A) Sagen wir in Ordner A, ich habe 10 Dateien, die täglich aktualisiert werden. Ich muss diese Dateien überprüfen und wenn die Dateien mit dem neuesten Zeitstempel aktualisiert sind, dann in den Zielordner kopieren. Die Anzahl der Dateien in Ordner A kann variieren. b) Wenn unter 10 Dateien keine Datei aktualisiert wird, wird ein Anzeigefehler angezeigt, der besagt, dass diese Datei nicht aktualisiert wird. b) Am Zielort muss ich vor dem Kopieren vorhandene Dateien archivieren. Vielen Dank im Voraus.

Was ist "letzter Zeitstempel"? Ist es das heutige Datum? Was ist Ihr lokales Datumsformat und wie werden Sie "archivieren"?

Dias de verano, Ja, es ist das heutige Datums- und Datumsformat MM/TT/JJJJ.

WENN Sie Perl kennen und es verwenden können, finden Sie hier eine alternative Lösung.
Code:
Verwenden Sie strict; Verwenden Sie warnings; Verwenden Sie File :: Find; Verwenden Sie File :: Copy; Verwenden Sie Archive :: Tar; Verwenden Sie Cwd; Mein $ dir = "c:/test"; Mein $ destination = "c:/destination"; Mein $ archive_destination = "c:/archive_destination"; my ($ sec, $ min, $ stunde, $ tag, $ mon, $ jahr, $ wtag, $ ytag, $ isdst) = localtime (zeit); $ jahr + = 1900; $ mon + = 1; my $ archive = "$ year- $ mon- $ mday- $ hour- $ min- $ sec.tar"; #set archive filenamesub archive {my $ cwd = getcwd (); chdir ($ destination); meine @ Dateiliste; while (<>) {-f && push (@ Dateiliste, $ _); } #get files to archive my $ tar = Archive :: Tar-> new; $ tar-> add_files (@filelist); $ tar-> write ($ archive); move ($ archive, $ archive_destination); # archivierte Datei zum Ziel foreach verschieben (@filelist) {unlink $ _; # Dateien nach dem Archiv entfernen. } chdir ($ cwd);} sub wanted {if (lstat ($ _) && -f _ && (int (-M _) == 0)) {mein $ filename = $ File :: Find :: name; print "$ filename nach $ destination verschieben"; move ("$ filename", "$ destination") oder warn "$ filename kann nicht nach $ destination verschoben werden; $!"; } elsif (-f _) {print "Datei nicht aktualisiert: $ filename"; }} archive; find ({wanted => & wanted}, "$ dir");

Wenn ich so sagen darf, Ghostdog, eine ausgezeichnete Lösung!

Danke Ghostdog, aber ich brauche ein Skript, das geplant werden muss und daher nach einem Batch-Skript Ausschau hält

öffne deinen Editor, tippe perl myscript.plsave als mybatch.bat ein. Verwenden Sie den Taskplaner, um ihn regelmäßig auszuführen. Warten Sie andernfalls, bis andere Lösungen verfügbar sind.

Ich habe versucht, das Perl-Skript in mybatch.bat zu speichern und das Skript ausgeführt, es hat nicht funktioniert.

Nein, Sie speichern die Perl-Datei als Perl-Datei (.pl) und erstellen dann eine kleine Batch-Datei, die den Perl-Interpreter mit diesem Perl-Code aufruft. Sie können dann mithilfe des Stapels eine automatisierte Aufgabe einrichten, als hätten Sie eine reine Stapellösung angegeben.

Ok, ich habe Active Perl installiert, um dies auszuführen. Wie auch immer, ich brauche ein Batch-Skript, das das gleiche tut. Danke Ghostdog für das Perl-Skript. Kann ich eine Textdatei mit einer Liste von Dateinamen haben und dann jeden Dateinamen als Parameter übergeben, um nach einem Zeitstempel zu suchen und in den Zielordner zu wechseln?

sicher
Code:
benutze File :: stat; benutze Time :: localtime; benutze File :: Copy; mein $ Ziel; öffne (FH, "<", "file") oder die "Kann Datei nicht öffnen: $!"; while () {chomp; # Newline loswerden mein $ st = stat ($ _) oder sterben "No $ _: $!"; mein $ timestamp = $ st-> mtime; #Geben Sie die Änderungszeit der Datei in Sekunden seit # der Epoche ein, je nachdem, wie Sie den Zeitstempel-Code überprüfen möchten. verschieben ($ _, $ destination); } close (FH), lesen Sie die Dokumentation, um loszulegen. perldoc perl.

Beliebte Beiträge