2017-09-25 3 views
0

Ich muss Dateien in einem bestimmten Ordner mit einem Batch-Skript löschen, aber ich muss die letzte erzeugte Datei behalten. Unser Server verfügt über einen IIS-Ordner, in dem Protokolle erstellt werden, und wir müssen immer den letzten Ordner behalten, aber die älteren löschen.Löschen Sie Dateien in einem Ordner, aber behalten Sie die letzte generierte Datei

Derzeit haben wir dieses Skript, das alle Dateien in einem bestimmten Ordner löscht (in diesem Fall werden alle Dateien in C: \ Temp):

del /q "C:\Temp\*" 
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

Wie können wir diesen Code bearbeiten, um die letzten zu halten Datei im Ordner erzeugt?

Vielen Dank im Voraus für Ihre Hilfe.

+0

Suchen Sie nach der neuesten Datei und löschen Sie alle, die nicht diese Datei sind? –

+0

Sie müssen suchen, recherchieren, schreiben und Code selbst ausprobieren. Das Posten einer Datei, die nicht einmal versucht, die von Ihnen benötigte Aufgabe auszuführen, und um das Hinzufügen einer Aufgabe, ist eine direkte Codeanforderung und steht hier nicht zur Verfügung. – Compo

+0

Sie sagen, dass Sie Dateien löschen möchten, daher ist 'rmdir' sinnlos, da es Verzeichnisse löscht ... – aschipfl

Antwort

0

Diese Batchdatei bietet eine Lösung:

@echo off 
set "SourceFolder=C:\Temp" 
for /F "skip=1 delims=" %%I in ('dir "%SourceFolder%\*" /A-D /B /O-D 2^>nul') do del "%SourceFolder%\%%I" 
set "SourceFolder=" 

Der Befehl DIR gibt eine Liste von nur wegen der Optionen Dateinamen /A-D (Verzeichniseinträge mit Verzeichnisattribut nicht set) und /B (bare Format) bestellt nach Datum der letzten Änderung wegen /O-D, was bedeutet, dass der Name der neuesten modifizierten Datei zuerst ausgegeben wird.

eine Fehlermeldung ausgegeben durch DIR wenn der angegebene Ordner enthält keine Datei durch Umleiten der Fehlermeldung STDERR zu Gerät NUL Verwendung 2>nul zu hand geschrieben wird unterdrückt. Der Umleitungsoperator > muss hier mit dem Escape-Zeichen ^ maskiert werden, um als Literalzeichen bei der Verarbeitung der gesamten Befehlszeile durch den Windows-Befehlsinterpreter interpretiert zu werden. Später FOR führt in einem separaten Befehlsprozess im Hintergrund den Befehl dir "%SourceFolder%\*" /A-D /B /O-D 2>nul aus und erfasst den Ausgang, der in STDOUT geschrieben wurde.

FOR Option skip=1 Ergebnisse in erster Linie der erfassten Ausgangs Überspringen die den Dateinamen der neuesten geänderte Datei bedeutet ignorieren.

FOR Option delims= deaktiviert die Standard Aufspaltung der eingefangenen Zeilen in den Raum/Tab getrennte Zeichenfolgen als jede gesamte Dateinamen Schleifenvariable I für die Verwendung durch den Befehl von FOR ausgeführt zugewiesen werden sollte.

DEL löscht die Datei, wenn das überhaupt möglich ist.

Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.

  • del /?
  • dir /?
  • echo /?
  • for /?
  • set /?

Lesen Sie auch die Microsoft Artikel über Using Command Redirection Operators.

Verwandte Themen