Batch: Nur den neusten Unterordner

Kes

Newbie
Registriert
Juli 2013
Beiträge
3
Hallo zusammen

Szenario: Server mit täglicher Datensicherung
Datensicherung gestaltet sich folgendermaßen: Es wird ein Unterordner pro Tag erstellt. In diesem liegen 56 zip Dateien

IST: Aktuell werden täglich (ausser am WE) diese 56 Datein in dem Unterordner mit 7ZIP entpackt (Montags dann halt das ganze Prozedere 3x, Sa, So, Mo)

SOLL: Batch Datei soll in der Schedule täglich morgens laufen und im aktuellsten Ordner die ZIP Dateien entpacken.

Das entpacken ansich ist kein Problem, hier kenne ich die Befehle mit 7ZIP. Nur wie drücke ich aus, dass er nur nach dem Ordner mit dem aktuellen Datum suchen soll und nur in diesem die Daten enpackt (ohne dass er die anderen Unterordner nach ZIP Dateien durchsucht).

Zum Verständnis nochmal die Datenstuktur:

D:\Ordner\Ordner01012013
D:\Ordner\Ordner02012013
D:\Ordner\Ordner03012013
D:\Ordner\Ordner04012013
D:\Ordner\Ordner05012013
D:\Ordner\Ordner06012013
D:\Ordner\Ordner07012013
D:\Ordner\Ordner08012013
(...)

Die Batch soll in D:\Ordner\ liegen.

Vorab Vielen Dank und
Viele Grüße
Kes
 
Zuletzt bearbeitet:
Wenn die Ordner-Nummerierung fortlaufend ist, könntest Du die Ordnerliste durch eine Schleife rasseln lassen und an eine Variable übergeben. Sodass letztlich nur der Letzte und somit Aktuelle hängen bleibt.

Edith sagt, die Ordner-Nummerierungen sind das Datum...
sorry, war mir spontan nicht aufgefallen. In dem Fall musst die Liste nach Datum geordnet ausgeben und je nach dem den letzten oder ersten Eintrag an die Variable reichen.
 
Zuletzt bearbeitet:
Code:
@echo off

for /f "delims=" %%f in ('dir . /B /O:-N') do (
	if exist "%%f\*" (
		for /f "delims=" %%x in ('dir "%%f\*.7z" /B') do (
			:: hier abändern
			:: Datei %%x entpacken usw.
		)

		goto :end
	)
)
:end
Geht durchs aktuelle Verzeichnis und sucht sich den letzten Ordner (nach Datum). Funktioniert nur zuverlässig, wenn die Ordnerstruktur nach Namen sortierbar ist. Dafür würde ich dir aber eher das Format %jahr%%monat%%tag% ans Herz legen, da du so nach Namen sortieren kannst. Jetzt zerhauts dir die Sortierung vollkommen - 01012000 käme vor 03032013.

Nach Datum sortieren wäre eine Möglichkeit (Parameter /O:-D), hat aber den Nachteil, dass dort dann keine Änderungen mehr durchgeführt werden dürfen.
 
@chibbi: Seit wann ist TTMMYYYY fortlaufend?

Also ich würde auf YYYYMMTT umstellen, dann hat man eine vernünftige Sortierung.

Und eigentlich müsste es auch möglich sein, in der Batch-Datei das aktuelle Datum aufzubauen in Form von TTMMYYYY und dann hat man doch auch den Ordner, den man braucht...

Was heißt aktuellem Datum? Nur das heutige oder das letzte im Ordner?
 
Unter Linux könnte ich dir das sagen, ob es so etwas unter Windows gibt weiß ich nicht genau.
Aber du könntest dies installieren.

http://sourceforge.net/projects/unxutils/?source=dlp

Dort gibt es das Programm "head" und das Programm "tail".
Auf meinen V-Server mache ich das wie folgt:

Ich lass die Ordner nach Datum / Namen sortieren und schreibe die Ausgabe dann in eine Logdatei.
cd D:\Ordner
dir /OD /B > D:\Ordner\inhalt.txt

So und jetzt hast du den gewünschten Ordner immer in der letzten Zeile.
Es fehlt also noch ein:

cd | tail -n 1 D:\Ordner\inhalt.txt

Sprich du musst mal schauen ob Windows Pipes versteht oder ob man die ausgegebene Variable anders übergibt. Der Befehl soll jetzt in der letzte Zeile schauen und den Ordnernamen weitergeben der dort steht.
Und CD springt dann in diesen Ordner in dem du dann deine Zip Operationen erledigen kannst.

Dies nur als Denkanstoss, vermutlich geht das auch viel einfacher...
 
@1668mib
siehe Edit ;)

@Yuuri
Ich hätte ihn ja erstmal grübeln lassen... :D
es kam ja nicht mal ein Ansatz. ^^

Code:
for /f %%i in ('dir /b /a d /o d') do if not defined latest set latest=%%i

das war mein Gedanke, ungetestet.
 
Hallo zusammen!

Wow, vielen Dank für die ganzen Ideen!
Manchmal sieht man den Wald vor lauter Bäumen nicht, klar!! Die Datumsabfrage :D

Danke für den Stein des Anstosses!
Eure Codes teste ich jetzt mal und melde mich gleich dazu!

Merci
Kes
 
Ich würde wohl in die Richtung gehen:

Code:
for /f "delims=$ " %%i in ('date /T') do set datum=%%i
echo Aktuelles datum %datum%
rem Annahme, dass das Datum in der Form tt.mm.jjjj kommt
set jahr=%datum:~6,4%
set monat=%datum:~3,2%
set tag=%datum:~0,2%
echo Tag: %tag%
echo Monat: %monat%
echo Jahr: %jahr%
(Quelle: http://www.winhelpline.info/forum/p...um-als-umgebungsvariable-stringvergleich.html )

Mit Tag/Monat/Jahr kann man ja den Ordner-Namen zusammenbauen... verstehe nicht, warum man da mit dir arbeiten sollte...
 
Zurück
Oben