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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 269735
Url: https://administrator.de/contentid/269735
Printed on: April 27, 2024 at 05:04 o'clock
4 Comments
Latest comment
Moin,
mit Powershell schnell gemacht
Gruß jodel32
mit Powershell schnell gemacht
$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)
}
}
Hallo Nimrodi, willkommen im Forum.
Auch mit Batch ist das machbar, allerdings etwas komplizierter.
ECHO und PAUSE kannst du rausschmeißen, um den Code scharf zu schalten.
Grüße
rubberman
EDIT Zeile 15 korrigiert, siehe unten ...
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%
Grüße
rubberman
EDIT Zeile 15 korrigiert, siehe unten ...