nimrodi

Automatisch Ordner und Unterordner anlegen mit historischem Datum (Schaltjahre berücksichtigen)

Hallo zusammen,

ich möchte in einem Zielverzeichnis eine bestimmte Ordnerstruktur mit Unterordnern anlegen, die ein fortlaufendes historisches Datum tragen sollen. Die Struktur soll wie folgt aussehen:

...Zielverzeichnis\Jahr\Jahr_Monat_Tag\
also
...Zielverzeichnis\1951\1951_01_01\

Es gibt zwar unzählige Beschreibungen wie man Ordner mit aktuellem Datum anlegt, aber für historische Daten konnte ich keine brauchbare Beschreibung finden.
Im Idealfall möchte ich in der Batch Datei nur das Startjahr und das Endjahr eingeben müssen. An sich wäre das überhaupt kein Problem für mich, gäbe es keine Schaltjahre.

Gibt es da eine Möglichkeit beim Anlegen der "Tagesordner" den Kalender zu berücksichtigen oder muss ich die ganzen Schaltjahressonderfälle in die Schleifen einbauen?

Besten Dank schonmal!
Nimrodi
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 269735

Url: https://administrator.de/forum/automatisch-ordner-und-unterordner-anlegen-mit-historischem-datum-schaltjahre-beruecksichtigen-269735.html

Ausgedruckt am: 15.05.2025 um 02:05 Uhr

114757
114757 20.04.2015 aktualisiert um 21:14:24 Uhr
Goto Top
Moin,
mit Powershell schnell gemacht face-wink
$folder = 'c:\ordner'  
[int]$start = read-Host "Startjahr eingeben"  
[int]$end = read-Host "Endjahr eingeben"  
($start)..($end) | %{
    md "$folder\$_"  
    $d = get-date "01.01.$_"  
    while($d -lt (get-date "01.01.$_").AddYears(1)){  
       md "$folder\$_\$($d.toString('yyyy\_MM\_dd'))"  
       $d = $d.AddDays(1)
    }
}
Gruß jodel32
rubberman
Lösung rubberman 20.04.2015, aktualisiert am 21.07.2015 um 18:28:34 Uhr
Goto Top
Hallo Nimrodi, willkommen im Forum.

Auch mit Batch ist das machbar, allerdings etwas komplizierter.
@echo off &setlocal
set "dest=Zielverzeichnis"  

set /p "ys=Startjahr: "  
set /p "ye=Endjahr:   "  

setlocal EnableDelayedExpansion
for /l %%i in (!ys! 1 !ye!) do (
  for /l %%j in (101 1 112) do (
    set "m=%%j"  
    call :DaysInMonth %%i !m:~-2!
    set /a "d = 100+!errorlevel!"  
    for /l %%k in (101 1 !d!) do (
      set "d=%%k"  
      ECHO md !dest!\%%i\%%i_!m:~-2!_!d:~-2!
    )
  )
)
PAUSE
exit /b

:DaysInMonth YY MM
setlocal DisableDelayedExpansion
set /a "YY = %~1, MM = 100%~2 %% 100"  
set /a "n = 30+!(((MM&9)+6) %% 7)+!(MM^2)*(!(YY %% 4)-!(YY %% 100)+!(YY %% 400)-2)"  
endlocal &exit /b %n%
ECHO und PAUSE kannst du rausschmeißen, um den Code scharf zu schalten.

Grüße
rubberman

EDIT Zeile 15 korrigiert, siehe unten ...
Nimrodi
Nimrodi 21.07.2015 um 13:52:14 Uhr
Goto Top
Hi rubberman,

sorry fürs späte antworten. Deine Version funktioniert. In der ersten for-Schleife fehlt nur "set y=%%i", dann passts. Die Version mit Powershell von jodel32 habe ich nicht probiert.
rubberman
rubberman 21.07.2015 um 18:24:46 Uhr
Goto Top
Hallo Nimrodi.

In der ersten for-Schleife fehlt nur "set y=%%i"
Da hast du natürlich Recht, sorry. Ebenso kann man aber die Variable y ganz in die Tonne treten und gleich mit der FOR Variablen %%i arbeiten. Ich ändere oben mal entsprechend.

Grüße
rubberman