online 1
gast (50)

/ Forum / Windows classik

Windows classikWindows classik

Fragevon RealJacky vom 04.07.2019, 06:22 Options

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

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 schreiben

Antwort 1 von kicia vom 04.07.2019, 07:50 Options

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 vom 04.07.2019, 08:11 Options

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 vom 04.07.2019, 08:15 Options

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 vom 04.07.2019, 13:21 Options

//
// 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 vom 04.07.2019, 13:32 Options

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 vom 05.07.2019, 20:25 Options

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 vom 05.07.2019, 20:44 Options

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 vom 05.07.2019, 20:51 Options

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 vom 05.07.2019, 21:04 Options

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 vom 05.07.2019, 21:22 Options

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 vom 05.07.2019, 23:12 Options

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 vom 05.07.2019, 23:28 Options

@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 vom 05.07.2019, 23:42 Options

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 vom 06.07.2019, 10:09 Options

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 vom 06.07.2019, 14:03 Options

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ß

Ähnliche Themen

Programmaufruf mit Batch-Datei
Martina  09.11.2007 - 370 Hits - 5 Antworten

Batch Ordner Downloaded
Harvey17  14.03.2008 - 106 Hits - 2 Antworten

Wieviele Wochen seit bestimmtem Datum
fuenf  04.04.2008 - 93 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026