Schleife zum Kopieren von Dateien bis zu einem bestimmten Dateityp

josi04

Newbie
Registriert
Juli 2015
Beiträge
2
Hallo,

ich habe folgende Problemstellung und hoffe, dass mir jemand zumindest ein paar Denkanstöße geben kann. In der Suche bzw. bei Google hab ich leider nichts Entsprechendes gefunden.

Es sollen in einem Ordner alle Dateien, egal welcher Dateityp, in einen bereits angelegten Ordner kopiert werden, bis ein bestimmter Dateityp .xyz erreicht ist. Diese Datei soll dann ebenfalls kopiert werden. Dieser Dateityp kommt im Ordner mehrfach mit verschiedenem Alter vor. Die Schleife soll nach der ersten/neuesten gefundenen Datei dieses Typs beendet werden.

z.B. 1.abc, 2.abc, test.efg, blupp.xyz, bla.xyz -> alle Dateien inklusive blupp.xyz, aber nicht bla.xyz

Ich habe mir überlegt, das in einer Batch-Datei zu lösen, da das Ganze immer vor einem bestimmten Prozess laufen sollte. Wenn es eine andere Lösung als eine Batchdatei gibt, wäre das natürlich auch gut.

Leider kenne ich mich nur ein wenig in C# aus, aber nicht genug, um z.B. Dateiendungen auslesen zu können.
Mit robocopy konnte ich das Problem leider auch nicht zufriedenstellend lösen.

Grüße
 
Eine Batchdatei kann so was nicht weil zu kompliziert. Windows Scripting Host, Powershell, Python, etc.
Am Ende wirst du wahrscheinlich programmieren müssen.

PS: aus einer kurzen Google Suche:
Code:
string[] files = System.IO.Directory.GetFiles(path, "*");
foreach (string f in files)
{
    // do what you want with the file now you have it's name
}
 
Nach welcher Sortierung soll denn gearbeitet werden? Bisher sieht es nach einer Augensortierung aus, sowas geht in der Automatik einfach nicht. Oder eine Alterssortierung? Dann dürfte es einfacher sein und auch einige fertige Skripte im Netz geben.
 
Du müßtest die FOR Schleife bei einem Batchscript verwenden können.

Dort kannst Du die Ausgabe eines Befehls nutzen (dir) oder auch eine Textdatei als Eingabe nehmen.

Die Textdatei könntest Du vorher mit dem dir Kommando erstellen.
 
josi04 schrieb:
Es sollen in einem Ordner alle Dateien, egal welcher Dateityp, in einen bereits angelegten Ordner kopiert werden, bis ein bestimmter Dateityp .xyz erreicht ist. Diese Datei soll dann ebenfalls kopiert werden. Dieser Dateityp kommt im Ordner mehrfach mit verschiedenem Alter vor. Die Schleife soll nach der ersten/neuesten gefundenen Datei dieses Typs beendet werden.

Abgesehen von der unklaren Sortierordnung könntest Du das sehr einfach mit Perl machen (auch unter Windows). Du musst nur die Pfad-Backslashes als Slashes schreiben.
Code:
use strict;
use warnings;
use File::Copy;

# Kommndozeileneingabe
# dasprogramm   c:/vonhier   c:/nachhier   txt
my ($quelle, $ziel, $erweiterung) = @ARGV;

opendir my $dh, $quelle or die "can't open $quelle: $!";
my @fns =
   sort { $a->[1] cmp $b->[1] }     # 2. Sortieren nach Erweiterung
     sort { $b->[2] cmp $a->[2] }   # 1. Sortieren nach Zeit
        map [/^(.+)\.([^.]+)$/g,(stat"$quelle/$_")[10]],
           grep { /^[^.]/ && -f "$quelle/$_" }
              readdir $dh;
closedir $dh;

for my $fn (@fns) {
   my $name = "$fn->[0].$fn->[1]";
   copy("$quelle/$name","$ziel/$name") or die "Kopierfehler: $!";
   printf "Kopiere %s aus %s nach %s\n", $name, $quelle, $ziel;
   last if $fn->[1] eq $erweiterung
}

Klappt jedenfalls bei mir.


/Edit: Die Sortierung ist, nach nochmaligem Lesen des Ausgangspostings, 1. Zeit (Reverse), 2. Extension. Das müsste es nun sein.
 
Zuletzt bearbeitet: (Zeitsortierung)
Erstmal danke für die Antworten

Entschuldigung, dass ich das mit der Sortierung nicht genau angegeben habe.
Die Dateien werden nach Datum sortiert. Es läuft so ähnlich wie bei inkrementellen Backups, es wird an einem Tag eine Datei "xyz" erstellt und an den Folgetagen kleinere "abc"-Dateien. Es soll nun, wie schon gesagt, immer nur die letzte "xyz" und alle folgenden neueren "abc"-Dateien kopiert werden. Alles, was älter als die letzte "xyz" ist, soll eben nicht kopiert werden.
Ich hoffe mal, das war es, was Ihr meintet...

@ HominiLupus:
Eine Batchdatei kann so was nicht weil zu kompliziert. Windows Scripting Host, Powershell, Python, etc. Am Ende wirst du wahrscheinlich programmieren müssen.
Das hatte ich schon befürchtet bzw. mir schon fast gedacht.


@blöderidiot: Die Sache mit Perl muss ich mir mal anschauen
 
Zurück
Oben