Jump to content

Menge von Dateien in einem Verzeichniss


amdinside

Empfohlene Beiträge

Hi All,

 

weiss jemand wie man mit Boardmitteln (Batch) oder Kommandozeilentools in einem Verzeichniss prüfen kann, wieviele Dateien darin sind

und dann zb alle was mehr ist wie 20 löschen kann ?

 

ZB sind mehr als 20 Dateien in C:\1 , wenn ja lösche alle älteren.

 

Bei XDEL und robocopy hab ich nichts dergleichen gefunden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

Hier mal eine BAT die sowas macht.

 

@ECHO OFF

 

Dir c:\temp\*.* | FIND "File(s)" | SETWORD 1 > TMP.BAT

CALL TMP.BAT DelFiles

 

IF %Delfiles% GTR 20 goto :Delete_Files

DEL TMP.BAT /Q

exit

 

:Delete_Files

Del c:\Temp\testdir\*.* /Q

DEL TMP.BAT /Q

exit

 

 

Bei einem deutschen Betriebssystem musst du hier statt "File(s)" "Datei(en)" reinschreiben.

 

Ich hab hier die Verzeichnisse fest drin ...war ja nur ein Test. ;)

Der BATCH fragt mittels DIR das Verzeichnis Temp ab und danach wird nach dem Ergebnis gesucht und SETWORD schreibt es in die TMP.BAT....die kannst du dann mittels CALL zum setzen einer Variable aufrufen und prüfen.

 

Hier noch das Tool "SETWORD" und die Beschreibung davon / Tool muss in System32-Verzeichnis.

 

=========== SETWORD.COM - Systeminformationen ====== Lektion #20 ===

 

 

Häufigstes Problem bei der Programmierung von Batch-Abläufen ist

die Verwendung von System- und Datei-Informationen: Tagesdatum und

Uhrzeit, Volume Label, aktuelles Verzeichnis oder Laufwerk,

Verzeichnispfad einer Datei, Dateidatum und so weiter.

 

DOS bietet hier leider keine fertigen Lösungen an. Sofern man nicht

mit 4DOS arbeitet, gibt es folgende Möglichkeiten:

 

(1) reine Batchlösungen, die meist recht aufwendig und schwer zu

durchschauen sind,

 

(2) kleine Utilities, von denen sich mit der Zeit eine ganze Menge

ansammeln,

 

(3) Multifunktionsprogramme, also eine Zusammenfassung vieler

Funktionen in einem Programm.

 

Hier soll eine Lösung vorgestellt werden, die eine Mischung aus

allen dreien ist. Dazu wird ein kleines Programm (SETWORD.COM) in

Verbindung mit normalen DOS-Funktionen und Umleitungen/PIPEs

eingesetzt, so daß auch ein Lerneffekt für diesen Batchkurs dabei

abfällt. Das nötige Programmm wird (als "DEBUG-Skript", s.u.) gleich

mitgeliefert.

 

SETWORD.COM liest per PIPE (|) den DOS-Output von Befehlen wie DIR,

VOL, DATE, TIME etc. und entnimmt daraus das soundsovielte Wort -

auch über mehrere Zeilen hinweg! Die Position des Wortes (1...)

wird zu SETWORD angegeben - ohne Angabe gilt 1. Beispiel:

 

VOL A: | SETWORD 6

 

Der Befehl VOL liefert z.B.:

 

Datenträger in Laufwerk A: ist BACKUP

-----1----- 2- ----3--- 4- -5- --6---

 

Damit nun das Wort im BAT-Ablauf verwendet werden kann, schreibt

SETWORD einen entsprechenden SET-Befehl (per > Umleitung) in eine

temporäre BAT-Datei, die dann per CALL ausgeführt wird, z.B.:

 

VOL A: | SETWORD 6 > TMP.BAT

 

In der TMP.BAT steht dann folgendes (gem. obigem Beispiel):

 

SET %1=BACKUP

 

Anstelle eines Variablennamens wird immer %1 geschrieben, d.h. der

Name ist selbst variabel und wird beim CALL als Parameter angegeben,

also:

 

VOL A: | SETWORD 6 > TMP.BAT

call TMP.BAT LABEL

:: ^^^^^--------- Name der Variablen

 

Nun kann %LABEL% abgefragt oder sonstwie verwendet werden.

 

Ohne Umleitung der Ausgabe erscheint der SET-Befehl auf dem Bild-

schirm - zum Testen genau das Richtige. Ausprobieren:

 

VOL | SETWORD 4 (aktuelles Laufwerk)

CD | SETWORD 1 (aktuelles Verzeichnis)

DIR Datei | SETWORD 11 (Pfad einer Datei)

TRUENAME Datei | SETWORD (Datei mit komplettem Pfad)

 

Und was passiert, wenn SETWORD keine Eingabe per PIPE erhält?

Dann wird die Eingabe halt von der Tastatur eingelesen, z.B.:

 

SETWORD > TMP.BAT

call TMP.BAT INPUT

 

 

Verzeichnis der TMP.BAT

-----------------------

In den Beispielen wurde die TMP.BAT im aktuellen Verzeichnis

angelegt, und sollte daher anschließend wieder gelöscht werden.

Das kann man sich sparen, wenn immer das Verzeichnis %TEMP%

verwendet wird, z.B.:

 

CD | SETWORD > %temp%\TMP.BAT

call %temp%\TMP UDIR

 

 

Zum Programm SETWORD

--------------------

Als Trennzeichen zwischen Wörtern in der Eingabedatei gelten

Leerzeichen, Komma, Semikolon, Gleichheitszeichen und CR,LF

(Zeilenabschluß). Max. Größe der Datei: 60 KB.

 

Weitere Anwendungen

-------------------

DIR liefert eine Menge Informationen. Neben dem aktuellen Laufwerk

kann für jede beliebige Datei z.B. der Verzeichnispfad, der Name

ohne Extension, nur Extension, Datei-Datum und -Größe ermittelt

werden. Bei Bedarf läßt sich auch eine bestimmte Zeile per FIND

herausziehen (hier um die Anzahl Dateien zu ermitteln):

 

DIR *.GIF | FIND "Datei(en)" | SETWORD 1

 

Bei DATE und TIME hält DOS an und wartet auf eine Eingabe oder

RETURN. Dieses RETURN wird daher per ECHO an DATE/TIME gepiped:

 

ECHO.| DATE | SETWORD 4

 

DOS-Version

-----------

Die Beispiele oben gelten für MS-DOS 5.0 (deutsch). Abweichungen

im Output bei anderen Versionen möglich, also bitte ausprobieren

und abzählen...

 

Und hier ist das Proggi:

--------------------------------------------schnipp---------------

e100 BE 81 0 AC "

e118 "s"6 F7 E1 1 D8 "s"ED "P"BE A2 1 "+"DB 89 F2 B9 0 F0 B4 "?"CD

e12E "!"8B D8 C6 0 1A B9 7 0 BA 9B 1 BB 1 0 B4 40 CD "!]"85 ED "u"

e145 1 "E+"C9 AC "

e160 "t"E7 "N"89 F2 80 "

e17B "t"8 "

e191 "!"B4 ">"CD "!"B8 0 "L"CD "!set %1="

n SETWORD.COM

rCX

A2

w

q

--------------------------------------------schnapp---------------

SETWORD_TESTBATCH.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.
×
×
  • Neu erstellen...