maddus
Goto Top

Ordner nach Datum sortiert finden

Hallo,

dank des Forum konnte ich schon meine Dateien per Batch zippen und in einen Ordner packen. Die Ordner haben folgende Struktur JJJJ-MM-TT. Jetzt möchte ich per Batch den Namen des aktuellsten Ordners in eine Variable speichern.

Bsp.:
2011-03-16
2011-03-25
2011-03-27
2011-03-28

Die Batchfunktion soll mir nun 2011-03-28 zurückgeben.

Wie kann man sowas realisieren? Gerne auch Denkanstöße wonach ich suchen könnte, um selber die Lösung zu finden. Ein Dankeschön schon mal im Voraus...

MfG
maddus

Content-ID: 163569

Url: https://administrator.de/contentid/163569

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

BigWim
BigWim 29.03.2011 um 15:06:01 Uhr
Goto Top
Moin maddus,

mein Vorschlag wäre mit einer For-Schleife einen Dir auszuführen und je nach Sortierung ist der aktuellste Ordner entweder der erste oder letzte Wert ....

Grüße
Markus
Skyemugen
Skyemugen 29.03.2011 um 15:09:20 Uhr
Goto Top
Aloha,

auf die Schnelle würde ich per dir /b /ad /oOption %Pfad% eine temporäre Datei erstellen, wo die Ergebniss reingeschrieben werden und per for-Schleife die letzte Zeile auslesen (hab da was rumliegen ;D aber du möchtest ja gerne selbst die Lösung finden => gut so).
(ginge bestimmt auch anders aber das ging mir jetzt am Schnellsten für mich ^.^)

greetz André

edit: Option hinzugefügt (n bevorzugt)
bastla
bastla 29.03.2011 um 15:14:21 Uhr
Goto Top
@Skyemugen
Bitte keine "temporäre Datei" (und Deinem "/o" fehlt das "d") ... face-wink

@BigWim
... wobei es die Verwendung des letzten Wertes einfacher macht ...

Grüße
bastla
Skyemugen
Skyemugen 29.03.2011 um 15:22:20 Uhr
Goto Top
Aloha bastla!

da fehlt nicht unbedingt das /d, man könnte auch /n nehmen, daher ließ ich es weg :P darf der TE entscheiden.
Keine temp-Datei, ne? Dachte ich mir schon, nur schnell per useback delims txt-Datei auslesen lief bei mir, direkt den letzten Wert aus'm dir in der for-Schleife auszulesen will mir heute nicht gelingen *grml*

greetz André
BigWim
BigWim 29.03.2011 um 15:26:17 Uhr
Goto Top
@bastla
... wobei es die Verwendung des letzten Wertes einfacher macht ...
Tja, ich konnte mich nicht entscheiden, was sinnvoller ist.

  • Bei Verwendung des letzten Wertes muß die For-Schleife ja durchlaufen.
  • Bei Verwendung des ersten Wertes benötige ich eine Abbruchbedingung.

Ich hätte das jetzt in Abhängigkeit der Rückgabewerte von Dir entschieden ...

Grüße
Markus
bastla
bastla 29.03.2011 um 15:40:37 Uhr
Goto Top
@BigWim
"for"-Schleifen lasse ich eigentlich immer bis zum Ende laufen, deswegen finde ich den letzten Wert besser ...

@Skyemugen
Mit den beiden Möglichkeiten hast Du natürlich recht (wobei ich eigentlich auch - aufgrund der vernünftigen Schreibweise JJJJ-MM-TT - zu "n" raten würde); aber es sah irgendwie "unfertig" aus ... face-wink

Da die Ordnernamen ja offensichtlich nur aus der Datumsangabe bestehen, brauchst Du weder "delims" nocht "usebackq" (und noch nicht einmal "tokens") - allerdings würde ich (zur Sicherheit) dem %Pfad% noch eine Maske der Art "20??-??-*" mit auf den Weg geben ...

Grüße
bastla
Skyemugen
Skyemugen 29.03.2011 um 15:44:17 Uhr
Goto Top
Aloha bastla!

ja, danke, habe ich eben auch gemerkt, dass ich den Vorkäse weglassen kann und es dann natürlich auch so funktioniert mit dir in der Schleife.
Die Maske für den Fall, dass noch andere Ordner enthalten sein könnten? tbh: da ich kein Theater mag, wäre ich mir nicht ganz sicher, wie das Maskieren in diesem Fall geschehen sollte

greetz André
bastla
bastla 29.03.2011 um 15:50:55 Uhr
Goto Top
Hallo Skyemugen!

Mit der Schreibweise
dir /b /ad /on "%Pfad%\20??-??-*"
sollte das bis inklusive 2099 (ganz ohne Theater) funktionieren ...

Grüße
bastla

[Edit]
So ein "/a-d" hätte das Ganze aber spannender gemacht face-wink ...
Na gut, dann ändere ich es eben wieder.
[/Edit]
BigWim
BigWim 29.03.2011 um 15:54:44 Uhr
Goto Top
Hallo Bastla,

"for"-Schleifen lasse ich eigentlich immer bis zum Ende laufen, deswegen finde ich den letzten Wert besser ...
Dann vertraue ich auf Deine Erfahrungswerte und werde das beherzigen. Die Wahrscheinlichkeit (in diesem Fall) auf >21.900 Ordner zu treffen, ist ja wirklich nicht riesig ....

Grüße
Markus
Skyemugen
Skyemugen 29.03.2011 um 15:57:51 Uhr
Goto Top
Aloha bastla!

hm, interesting, warum bin ich bisher noch nie über ein solches Maskieren gestoßen ... hm
Aber das /a-d lassen wir doch lieber bei /ad sonst find' der nix ^.^

So, der TE hat mich nun mehrfach schon pmed, dass ihn die Lösung interessiert ...
Geben wir ihm noch ein wenig Zeit, die einfache Sache mit unseren Kommentaren selbst zu schaffen schlimm genug, dass wir schon wieder so viel dazu schreiben *lach*

greetz André
maddus
maddus 29.03.2011 um 15:58:48 Uhr
Goto Top
Erstmal ein großes Dankeschön an alle. Hier nun meine "Lösung" bei Fehlern bitte gerne berichtigen.

for /f %%i in ('dir /b /ad /od D:\Sicherung\20??-??-*') do (  
set variable=%%i
)
echo %variable%

Somit bekomme ich den aktuellsten Ordner angezeigt.
Skyemugen
Skyemugen 29.03.2011 um 16:02:26 Uhr
Goto Top
Aloha maddus!

zwei Sachen:

a) da du nur einmalig die Variable setzt, kannst du auch alles ohne Klammern, in einer Zeile schreiben (was das do in der for-Schleife betrifft
b) wie wir angedeutet haben, wäre u.U. die Option /on besser, nimm mal an, du erstellst nachträglich einen 2011-02-20-Ordner, dann wäre der dein Ergebnis

ansonsten, schön gemacht ;)

greetz André

edit: fehlt eigentlich nur noch das grüne Häkchen am Thread und dann hab' ich auch gleich Feierabend *grins*
bastla
bastla 29.03.2011 um 16:06:38 Uhr
Goto Top
... und noch ein letztes Detail: Die Variable enthält (da "dir /b" ohne "/s" immer nur Datei-/Ordner-Namen liefert) natürlich keinen Pfad zum entsprechenden Ordner, daher ggf:
set variable=D:\Sicherung\%%i
oder vorweg mit
pushd D:\Sicherung
in den "Eltern"-Ordner wechseln (und nach der Verarbeitung mit "popd" zurück) ...

Grüße
bastla
maddus
maddus 29.03.2011 um 16:09:46 Uhr
Goto Top
Danke für die letzten beiden Kommentare und jetzt gibt es ein Häckchen für den Thread face-wink

MfG
maddus