Forum: PC-Programmierung Batch: copy in Reihenfolge der Dateispeicherzeit


von Korax K. (korax)


Lesenswert?

Hi Folks,

wie kann ich sicherstellen, daß ein (x)copy - Befehl eine Menge von 
Dateien in der Reihenfolge kopiert wie sie erstellt wurden?
So, das die Datei, welche zuerst erstellt wurde, später auch als erste 
kopiert wird.

Viele Grüsse
korax

von Peter II (Gast)


Lesenswert?

Fra Nk schrieb:
> wie kann ich sicherstellen, daß ein (x)copy - Befehl eine Menge von
> Dateien in der Reihenfolge kopiert wie sie erstellt wurden?
> So, das die Datei, welche zuerst erstellt wurde, später auch als erste
> kopiert wird.

ich denke es geht überhaupt nicht. Du müsstest mit dir und sortiertung 
eine Batchfile erzeugen und in diesen Batchfile jeden Datei einzeln mit 
(x)copy kopieren.

Oder gleich mit einer Scriptsprache arbeiten ( Perl, WSH usw ).

von Udo S. (urschmitt)


Lesenswert?

Was soll das bringen? Die Sortierung im Verzeichnis hängt dann eh wieder 
von den freien Stellen in der Directory Struktur ab.
Sortieren sollte dann die Weiterverarbeitung.

von Peter II (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Was soll das bringen? Die Sortierung im Verzeichnis hängt dann eh wieder
> von den freien Stellen in der Directory Struktur ab.

kann das Problem verstehen, ich hatte vor kurzen ein Autoradio mit MP3 
wo man die Daten auf einem USB-Stick haben kann. Dort steht extra in der 
anleitung das die Reihenfolge der Titel von der Kopierreihenfolge 
abhängig ist. Wenn ich es voher gelesen hätte, hätte ich ein anderes 
Radio genommen aber ausbauen wollte ich es nicht noch mal.

von Korax K. (korax)


Lesenswert?

Udo Schmitt schrieb:
> Was soll das bringen?

Das Zielverzeichnis wird von einem "FileSystemWatcher" (.NET) abgehört 
der auf eintreffende Dateien lauert. Und diese müssen in zeitlicher 
Reihenfolge ankommen um richtig zugeordnet werden zu können.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Soweit ich das verstanden habe, ist robocopy der große Bruder von xcopy. 
Schau dir das mal an. Eventuell kann dieses Programm sowas. Ich habs 
bislang nicht näher angesehen.

Eine Skriptsprache ist natürlich ne Option. Mit z.B. PHP sicherlich 
schnell gemacht.

von Peter II (Gast)


Lesenswert?

Abdul K. schrieb:
> Mit z.B. PHP sicherlich schnell gemacht.
naja PHP ist nun nicht gerade die Scriptsprache für Dateioperationen. 
Sie ist doch sehr weborientiert. Perl ist für sotwas meiner Meinung 
besser geeignet.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

PHP läuft einfach überall, deswegen habe ich es mir ausgesucht.

von Peter II (Gast)


Lesenswert?

Abdul K. schrieb:
> PHP läuft einfach überall, deswegen habe ich es mir ausgesucht.

ich behaupt einfach mal das Perl auf mehr Platformen läuft als PHP. Für 
Perl gibt es extra viele erweiterungen für Administrative sachen. z.b. 
AD-Verwaltung. Auch kann man in Perl mit Threads arbeitet was in PHP 
nicht geht. PHP ist nun mal eine Scriptsprache zur erzeugung von 
Webseiten. Kein System verwendet PHP zur automatisierung.

von Korax K. (korax)


Lesenswert?

Hi, noch was:

Auf den Rechnern läuft Windows NT4 und ich kann nichts zusätzliches 
installieren.

Mann kann doch For-Schleifen erstellen, nur wie lese ich das 
Dateierstelldatum aus? Setzen geht komischerweise.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Peter, deine Meinung in Ehren. Warum sollte ich nicht was nehmen, was 
ich bereits kann? PHP bekommt man bei vielen Webspaces gleich dabei. Das 
sieht bei anderen Sprachen eher mau aus.
Nicht das ich PHP gut fände. Mich stört sowieso, das in den allermeisten 
Programmiersprachen die gleiche Funktion jeweils anders realisiert 
werden muß. Selten, das eine Sprache was besonderes könnte.

Aus rein praktischer Erwägung benutze ich also PHP.

von miks (Gast)


Lesenswert?

sowas könnte funktionieren:

*** alles eine zeile ***
FOR /F "delims=*" %%i IN (' dir /b c:\inputdir\*.mp3 ')
  DO call :kopieren  %%i
*** alles eine zeile ***

pause
(goto :EOF)


:kopieren
   copy  c:\inputdir\"%*"   x:\outputdir
(goto :EOF)

*******************************************

übersicht zu NT4 CMD commands :
http://www.thelenchannel.com/1dos.php

von Markus B. (mbp-bayern)


Lesenswert?

Hallo;

vor einiger Zeit habe ich mir ein Tool in VB6 geschrieben,
welches einer Batch-Datei das alter einer angegebenen Datei in Minuten 
als ERRORLEVEL zur verfügung stellt.

villeicht hilft der Code dazu ja was:
1
Declare Sub ExitProcess Lib "kernel32" ( _
2
    ByVal uExitCode As Long)
3
4
5
Sub MAIN()
6
On Error GoTo Fehler
7
CmdLine = Command()
8
9
If CmdLine = "" Or InStr(1, CmdLine, "/?") <> 0 Then
10
    
11
    MsgBox "Bitte geben sie beim Programaufruf an der Komandozeile einen Dateinamen an - ein  ''@'' vor dem Dateinamen gibt an, dass der eigentliche Dateiname an Zeile 1 in dieser Datei steht; Das Alter der Datei in Minuten wird als Errorlevel an Batchfiles übergeben."
12
    End
13
14
End If
15
16
If Left(CmdLine, 1) = "@" Then
17
    Open CmdLine For Input As #1
18
    Line Input #1, FirstLine
19
    TheFile = FirstLine
20
    Close
21
Else
22
    TheFile = CmdLine
23
    
24
End If
25
26
Aenderung = FileDateTime(TheFile)
27
ExitProcess Abs(Val(DateDiff("n", Aenderung, Now, vbUseSystem, vbUseSystem)))
28
29
End
30
31
32
Fehler:
33
ExitProcess -1
34
35
36
End Sub

MFG:MBP
Markus

von Korax K. (korax)


Lesenswert?

miks schrieb:
> sowas könnte funktionieren:
>
> *** alles eine zeile ***
> FOR /F "delims=*" %%i IN (' dir /b c:\inputdir\*.mp3 ')
>   DO call :kopieren  %%i
> *** alles eine zeile ***
>
> pause
> (goto :EOF)
>
>
> :kopieren
>    copy  c:\inputdir\"%*"   x:\outputdir
> (goto :EOF)
>
> *******************************************
>
> übersicht zu NT4 CMD commands :
> http://www.thelenchannel.com/1dos.php

Hi miks,

ich habe Deinen Code um den parameter /o:d erweitert - und es läuft!
1
dir /b /o:d

Dein Code + Nachschlagen im von Dir gezeigtem Link haben mir sehr 
geholfen.

Vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.