Supportnet Computer
Planet of Tech

Supportnet / Forum / Windows2000

Batch-Datei, die Daten ab bestimmtem Datum in File schreibt





Frage

Hallo, ich habe von meinem Vorgesetzten den Auftrag erhalten, eine Batchdatei zu schreiben, die in eine Datei alle Files von Ordnern größer einem bestimmten Datum schreibt. Beispiel: Alle Dateien ab dem 1.7. sollen in eine TXT-File. Das Einlesen aller Files in die TXT-Files ist ja einfach: dir *.*/s /o:d > test.txt Aber wie bekomm ich das mit dem Datum hin ? Ich hab mal etwas von %date% gelesen, wäre das ein Ansatz ? Bitte um Hilfe !!! Gruß, Jacky

Antwort 1 von kicia

Man könnte mit DIR /O:DEN die liste erst nach datum sortieren, und dann von hand herauslöschen, was man nicht braucht.
Oder vielleicht erst alle Dateien incl. Datum in eine Textdatei schreiben, und dann wieder auslesen mit for /F... .
Leider wüßte ich nicht, daß man die Ausgabereihenfolge vom Datum ändern könnte, also kann man mit sowas wie if "%~t1" GEQ "03.07.07 07:41" ... nichts anfangen, oder?

Ich würde allerdings den Windows Scripting Host empfehlen, wenn möglich:

folgenden Code in eine neue Textdatei kopieren, Datei muß die Endung .js bekommen. Dann rechtsklick - öffnen.
(Das sollte das Script mit dem Programm wscript.exe (oder cscript.exe) starten.)

//---------------------------------
//---------------------------------
getFiles("C:/temp/");

function getFiles(fld)
{
var outstring = "";
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.getFolder(fld);
var files = new Enumerator(folder.Files);
var fromDate = Date.parse("07-02-2007 23:59:59 UTC+0000"); //-- UTC+<Zeitzone> siehe http://de.wikipedia.org/wiki/UTC

for (; !files.atEnd(); files.moveNext())
{
if(Date.parse(files.item().DateLastModified) > fromDate)
{
outstring += files.item().DateLastModified + " -- " + files.item().name + "\r\n";
// files.item().DateCreated
// files.item().DateLastAccessed
// files.item().DateLastModified
}
}
file = fso.OpenTextFile(fld + "dirlist.txt", 2, true);
file.write(outstring);
file.close();
WScript.Echo(outstring);
}
//---------------------------------

Antwort 2 von RealJacky

Das klappt gut, vielen Dank !
Eine Sache noch: kann man es irgendwie anstellen, dass die Einträge in der dirlist.txt nach Datum sortiert sind ?

Gruß,
Jacky

Antwort 3 von RealJacky

Hallo,

mir ist aufgefallen, dass nur die Hauptordner, aber keine Unterorder mitgezogen werden. Nachdem wir viele Dateien in Unterordnern haben, sollten diese irgendwie mitgenommen werden. Wie kann ich das bewerkstelligen ?

Gruß,
Jacky

Antwort 4 von kicia

//
// unterverzeichnisse auslesen:
//
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("C:/temp/dirlist.txt", 2, true);
file.write(getFiles("C:/temp/"));
file.close();

function getFiles(fld)
{
var outstring = "";
var folder = fso.getFolder(fld);
var files = new Enumerator(folder.Files);
var subfolders = new Enumerator(folder.SubFolders);
var fromDate = Date.parse("06-22-2007 23:59:59 UTC+0000"); //-- UTC+<Zeitzone> siehe http://de.wikipedia.org/wiki/UTC

for (; !files.atEnd(); files.moveNext())
{
if(Date.parse(files.item().DateLastModified) > fromDate)
{
outstring += files.item().DateLastModified + " >>" + files.item().path + "<<\r\n";
}
}

for (; !subfolders.atEnd(); subfolders.moveNext())
{
outstring += getFiles(subfolders.item().path);
}
return outstring;
}

Antwort 5 von kicia

sortieren geht natürlich auch, habe aber jetzt keine Zeit für ein Beispiel.
In Kürze:
Ich würde dafür statt der outstring variable ein Array benutzen:
var allFiles = new Array();
und dann für jeden Eintrag allFiles.push(files.item().....);
Anschließend dann mit zwei ineinander verschachtelten for-Schleifen (zB. i und k) immer den kleinsten folgenden Eintrag suchen, i in einen Buffer schreiben und mit k austauschen...
wenn ich jetzt nichts durcheinander gebracht habe.

Für weiteres siehe
JScript Language Reference:
http://msdn2.microsoft.com/en-us/library/yek4tbz0.aspx
FileSystemObject:
http://msdn2.microsoft.com/en-us/library/6kxy1a51.aspx

Antwort 6 von Beezeh

Hallo und Entschuldigung für eine Frage des Unwissens:

Wieso Batchdatei und Windows 2000? Ich dachte, Windows 2000 hat kein DOS mehr???

Gruß

Antwort 7 von harrrharrr

Eine Batchdatei muss ja nicht zwangsweise in Basic (unter DOS) geschriben werden, genau sogut geht VB (VisualBasic) oder JavaScript etc. unter Windows.

Gruß
harrr

Antwort 8 von rutel

batchdateien sind nie in basic. es stimmt schon, dass sie an dos gebunden sind (wenn wir von microsoftbetriebssystemen sprechen). windows 2000 hat zwar kein dos mehr, aber dafür eine dosemulation.

Antwort 9 von harrrharrr

Zitat:
batchdateien sind nie in basic

Wie kommst du denn darauf? Wenn ich als OS DOS benutze, warum sollte ich keine Batch schreiben können?

Stapelverarbeitung oder auch Batchverarbeitung ist ein Begriff aus der EDV und bezeichnet die sequentielle, nicht-interaktive Bearbeitung von Aufgaben, sonst nichts.

Gruß
harrr

Antwort 10 von rutel

Zitat:
Wenn ich als OS DOS benutze, warum sollte ich keine Batch schreiben können?

keine ahnung? unter dos sind batches wohl verbreiteter als sonstwo.

eine batchdatei ist eine zusammenfassung von konsolenbefehlen. mit basicprogrammen oder wsh-skripten haben sie nichts zu tun, selbst wenn diese sequentiell abgearbeitet werden sollten.
und diese unterscheidung macht sinn. niemand fragt danach, ob die befehle im quellcode einer kompilierten exe-datei vielleicht ohne schleifen und fallunterscheidungen sequentiell abgearbeitet werden, weil sie sonst nämlich eine batch wäre. sie ist ein ausführbares programm und gut.

Antwort 11 von Beezeh

Zitat:
windows 2000 hat zwar kein dos mehr, aber dafür eine dosemulation.

Ach deshalb. Dann ist es mir klar, dass DOS-Batchdateien funktionieren. Vielen Dank.

Grüße

Antwort 12 von harrrharrr

@rutel
eine batch bleibt eine batch (Stapel), ob compiliert oder nicht.
Nämlich eine Stapeldatei, die nach einander Befehle ausführt.
Ist das so schwer zu verstehen?

Zitat:
Ach deshalb. Dann ist es mir klar, dass DOS-Batchdateien funktionieren.

In diesem Beitrag war nicht von DOS- Batchdateien die Rede, schau dir die Antworten an, das ist kein DOS.

Gruß
harrr

Antwort 13 von Beezeh

Nun gut. So genau interessiert mich das nun auch wider nicht.
Ich kenne nur Stapelverarbeitung ("batch") als Punkt-bat-Dateien in DOS und freue mich, dass diese anscheinend auch in W2000 funktionieren (mit emulgiertem DOS ;-)

Antwort 14 von rutel

Zitat:
eine batch bleibt eine batch (Stapel), ob compiliert oder nicht.
Nämlich eine Stapeldatei, die nach einander Befehle ausführt.
Ist das so schwer zu verstehen?

ja schon. vor allem, wenn man weiss, dass batchdateien nicht mehr das sind, was sie, nach deiner zitierten ursprünglichen edv-definition, anscheinend einmal waren. sie sind nicht mehr darauf beschränkt sequentiell zu sein und sie können auch interaktiv sein. und das nicht erst seit gestern.

zwischen batches und skripten gibt es natürlich einen fliessenden grenzbereich. je höher entwickelt die batchmöglichkeiten werden, zb. unter vista oder linux, desto eher, sind batches skripte. man wird aber umgekehrt nie skripte als batches bezeichnen.

wenn ich mich wiederholen darf: eine batch ist eine textdatei, in der mehrere konsolenbefehle stehen. dazu gibt es rudimentäre programmablaufsteuernde befehle, wie schleifen oder sprünge, die als konsolenbefehle nur im zusammenhang mit batches sinn machen.

Zitat:
Eine Batchdatei muss ja nicht zwangsweise in Basic (unter DOS) geschriben werden

nochmal: basic ist eine höhere programmiersprache. basicprogramme, egal ob kompiliert oder interpretiert, sind keine batches.
Zitat:
, genau sogut geht VB (VisualBasic) oder JavaScript etc. unter Windows.

ich denke du meinst vbskript und jscript. dies sind skripte, die vom wsh ausgeführt werden. und das sind auch keine batches.

Zitat:
In diesem Beitrag war nicht von DOS- Batchdateien die Rede, schau dir die Antworten an, das ist kein DOS.

auf die antworten, als indikator dafür was gefragt wurde, zu verweisen, ist in diesem fall unglücklich. denn die antworten sind zwar wsh-skripte, es wurde aber ursprünglich nach batches gefragt. in wieweit batches unter w2k dos sind oder nicht, darüber kann man lange streiten.

Antwort 15 von Beezeh

Zitat:
in wieweit batches unter w2k dos sind oder nicht, darüber kann man lange streiten.

Wie "Der Dicke" ehemals sagte:
"Hauptsache ist, was hinten rauskommt!"

Beispiel: Zum Kopieren von ganzen Partitionen in W98SE (Platte auf Platte, Platte auf Stick, Stick auf Stick usw.) benutzte ich im DOS-Eingabe-Fenster folgende einfach anzupassende .bat-Datei:

@echo off
echo.
echo Kopiere:
echo.
echo d: i:\Backup_P
echo.
echo Hinweis: Wenn der Zielordner nicht vorhanden ist, lasse ihn bei der darauf
echo folgenden Abfrage "Dateiname oder Verzeichnisname" als Verzeichnis anlegen.
echo Wird der Zielordner neu angelegt, erh„lt er das aktuelle Datum.
echo.
echo.
pause
cls
xcopy /v /k /f /r /e /h /s /y d: i:\Backup_P

Wenn ich das nun im W2000-DOS-Fenster eingebe, läuft das gleiche Programm ab. Im System32-Ordner findet man dazu auch die Xcopy-exe, die Command.com und viele weitere bekannte DOS-Dateien zum Ausführen (nur ein paar fehlen, z.B. fdisk).
Was ist daran emuliert? Mit der entsprechenden dll laufen die "W2000-DOS-Befehle" sogar in W98SE.

Aber egal, Hauptsache... ;-)

Gruß