Mit batch Verzeichnis erstellen mit aktuellem Datum

So sollte es alles erfüllen:
Code:
@echo off & setlocal EnableDelayedExpansion 
REM Codepage für MÄRZ ändern
chcp 65001

REM aktuellen Tag, Monat, Jahr ermitteln
set TAG=%date:~0,2%
set MONAT=%date:~3,2%
set JAHR=%date:~6%

REM zu Testzwecken : Datum manuell vorgeben => wegen automatischer Ordnerlöschung am Samstag, Sonntag
REM set TAG=21
REM set MONAT=09
REM set JAHR=2021

REM Ordnernamen vorgeben
SET FOLDER1=Ordner1
SET FOLDER2=Ordner 2

REM Monatsnamen vorgeben
SET MONAT1=01 JANUAR
SET MONAT2=02 FEBRUAR
SET MONAT3=03 MÄRZ
SET MONAT4=04 APRIL
SET MONAT5=05 MAI
SET MONAT6=06 JUNI
SET MONAT7=07 JULI
SET MONAT8=08 AUGUST
SET MONAT9=09 SEPTEMBER
SET MONAT10=10 OKTOBER
SET MONAT11=11 NOVEMBER
SET MONAT12=12 DEZEMBER

REM Name der Wochentage vorgeben
SET TAG1=Montag
SET TAG2=Dienstag
SET TAG3=Mittwoch
SET TAG4=Donnerstag
SET TAG5=Freitag
SET TAG6=Samstag
SET TAG7=Sonntag

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

set Jahr=%JAHR%
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,%MONAT%,%TAG%) To DateSerial(J,%MONAT%,%TAG%):WScript.Echo(FormatDateTime(i)):Next
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do (

REM mit Powershell Wochentag zu Datum herausfinden
for /f %%j in ('powershell ^(get-date %%a.%%b.%%c^).DayOfWeek') do (
set dow=%%j

REM englische Schreibweise mit deutschen Wochentagen ersetzen
if %%j == Monday md "%%a.%%b.%%c %TAG1%"
if %%j == Tuesday md "%%a.%%b.%%c %TAG2%"
if %%j == Wednesday md "%%a.%%b.%%c %TAG3%"
if %%j == Thursday md "%%a.%%b.%%c %TAG4%"
if %%j == Friday md "%%a.%%b.%%c %TAG5%"
if %%j == Saturday md "%%a.%%b.%%c %TAG6%"
if %%j == Sunday md "%%a.%%b.%%c %TAG7%"
)
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM Samstag, Sonntag löschen
REM Samstag löschen
for /f "delims=" %%D in ('dir /a:d /b *%TAG6%') do (
rd /S /Q "%%D"
)

REM Sonntag löschen
for /f "delims=" %%D in ('dir /a:d /b *%TAG7%') do (
rd /S /Q "%%D"
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM Name1 und Name2 als Unterordner
for /f "delims=" %%D in ('dir /a:d /b') do (
cd %%D
md "%FOLDER1%"
md "%FOLDER2%"
cd..
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REM Monatsordner erstellen und verschieben
REM Monatsordner erstellen
MKDIR "%MONAT1%"
MKDIR "%MONAT2%"
MKDIR "%MONAT3%"
MKDIR "%MONAT4%"
MKDIR "%MONAT5%"
MKDIR "%MONAT6%"
MKDIR "%MONAT7%"
MKDIR "%MONAT8%"
MKDIR "%MONAT9%"
MKDIR "%MONAT10%"
MKDIR "%MONAT11%"
MKDIR "%MONAT12%"

REM Januar
for /f "delims=" %%D in ('dir /a:d /b *.01.*') do (
move /Y "%%D" "%MONAT1%"
)

REM Februar
for /f "delims=" %%D in ('dir /a:d /b *.02.*') do (
move /Y "%%D" "%MONAT2%"
)

REM März
for /f "delims=" %%D in ('dir /a:d /b *.03.*') do (
move /Y "%%D" "%MONAT3%"
)

REM April
for /f "delims=" %%D in ('dir /a:d /b *.04.*') do (
move /Y "%%D" "%MONAT4%"
)

REM Mai
for /f "delims=" %%D in ('dir /a:d /b *.05.*') do (
move /Y "%%D" "%MONAT5%"
)

REM Juni
for /f "delims=" %%D in ('dir /a:d /b *.06.*') do (
move /Y "%%D" "%MONAT6%"
)

REM Juli
for /f "delims=" %%D in ('dir /a:d /b *.07.*') do (
move /Y "%%D" "%MONAT7%"
)

REM August
for /f "delims=" %%D in ('dir /a:d /b *.08.*') do (
move /Y "%%D" "%MONAT8%"
)

REM September
for /f "delims=" %%D in ('dir /a:d /b *.09.*') do (
move /Y "%%D" "%MONAT9%"
)

REM Oktober
for /f "delims=" %%D in ('dir /a:d /b *.10.*') do (
move /Y "%%D" "%MONAT10%"
)

REM November
for /f "delims=" %%D in ('dir /a:d /b *.11.*') do (
move /Y "%%D" "%MONAT11%"
)

REM Dezember
for /f "delims=" %%D in ('dir /a:d /b *.12.*') do (
move /Y "%%D" "%MONAT12%"
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM GetDates.vbs aus TEMP-Ordner löschen
del /F /Q %temp%\GetDates.vbs

REM Überflüssige Ordner entfernen
rd /S /Q "%MONAT1%\%FOLDER1%"
rd /S /Q "%MONAT1%\%FOLDER2%"
rd /S /Q "%MONAT2%\%FOLDER1%"
rd /S /Q "%MONAT2%\%FOLDER2%"
rd /S /Q "%MONAT3%\%FOLDER1%"
rd /S /Q "%MONAT3%\%FOLDER2%"
rd /S /Q "%MONAT4%\%FOLDER1%"
rd /S /Q "%MONAT4%\%FOLDER2%"
rd /S /Q "%MONAT5%\%FOLDER1%"
rd /S /Q "%MONAT5%\%FOLDER2%"
rd /S /Q "%MONAT6%\%FOLDER1%"
rd /S /Q "%MONAT6%\%FOLDER2%"
rd /S /Q "%MONAT7%\%FOLDER1%"
rd /S /Q "%MONAT7%\%FOLDER2%"
rd /S /Q "%MONAT8%\%FOLDER1%"
rd /S /Q "%MONAT8%\%FOLDER2%"
rd /S /Q "%MONAT9%\%FOLDER1%"
rd /S /Q "%MONAT9%\%FOLDER2%"
rd /S /Q "%MONAT10%\%FOLDER1%"
rd /S /Q "%MONAT10%\%FOLDER2%"
rd /S /Q "%MONAT11%\%FOLDER1%"
rd /S /Q "%MONAT11%\%FOLDER2%"
rd /S /Q "%MONAT12%\%FOLDER1%"
rd /S /Q "%MONAT12%\%FOLDER2%"

-die VBS wird mit dem aktuellen Tag ausgeführt und erstellt somit nur einen Tages-Ordner
-Daten wie die Namen der beiden Ordner, Namen der Wochentage, Namen der Monate usw. können ganz oben eingetragen werden.
-der Monat MÄRZ sollte sich nun korrekt erstellen lassen
-Bereits erstellte Ordner bleiben unberührt
-Da ja das Skript an Samstag und Sonntag keinen Ordner bereitstellt, kann zu Testzwecken das Datum überschrieben werden. Hierzu das Wort REM entfernen:
Code:
REM set TAG=21
REM set MONAT=09
REM set JAHR=2021
Code:
set TAG=21
set MONAT=09
set JAHR=2021

//EDIT : Da fällt mir ein: Wenn das Skript täglich abläuft, so wird der ganze Passus mit dem VBS gar nicht mehr benötigt. Daher können ein paar Zeilen eingespart werden:
Code:
@echo off & setlocal EnableDelayedExpansion 
REM Codepage für MÄRZ ändern
chcp 65001

REM aktuellen Tag, Monat, Jahr ermitteln
set TAG=%date:~0,2%
set MONAT=%date:~3,2%
set JAHR=%date:~6%

REM zu Testzwecken : Datum manuell vorgeben => wegen automatischer Ordnerlöschung am Samstag, Sonntag
REM set TAG=21
REM set MONAT=09
REM set JAHR=2021

REM Ordnernamen vorgeben
SET FOLDER1=Ordner1
SET FOLDER2=Ordner 2

REM Monatsnamen vorgeben
SET MONAT1=01 JANUAR
SET MONAT2=02 FEBRUAR
SET MONAT3=03 MÄRZ
SET MONAT4=04 APRIL
SET MONAT5=05 MAI
SET MONAT6=06 JUNI
SET MONAT7=07 JULI
SET MONAT8=08 AUGUST
SET MONAT9=09 SEPTEMBER
SET MONAT10=10 OKTOBER
SET MONAT11=11 NOVEMBER
SET MONAT12=12 DEZEMBER

REM Name der Wochentage vorgeben
SET TAG1=Montag
SET TAG2=Dienstag
SET TAG3=Mittwoch
SET TAG4=Donnerstag
SET TAG5=Freitag
SET TAG6=Samstag
SET TAG7=Sonntag

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM mit Powershell Wochentag zu Datum herausfinden
for /f %%j in ('powershell ^(get-date %TAG%.%MONAT%.%JAHR%^).DayOfWeek') do (
set dow=%%j

REM englische Schreibweise mit deutschen Wochentagen ersetzen
if %%j == Monday md "%TAG%.%MONAT%.%JAHR% %TAG1%"
if %%j == Tuesday md "%TAG%.%MONAT%.%JAHR% %TAG2%"
if %%j == Wednesday md "%TAG%.%MONAT%.%JAHR% %TAG3%"
if %%j == Thursday md "%TAG%.%MONAT%.%JAHR% %TAG4%"
if %%j == Friday md "%TAG%.%MONAT%.%JAHR% %TAG5%"
if %%j == Saturday md "%TAG%.%MONAT%.%JAHR% %TAG6%"
if %%j == Sunday md "%TAG%.%MONAT%.%JAHR% %TAG7%"
)
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM Samstag, Sonntag löschen
REM Samstag löschen
for /f "delims=" %%D in ('dir /a:d /b *%TAG6%') do (
rd /S /Q "%%D"
)

REM Sonntag löschen
for /f "delims=" %%D in ('dir /a:d /b *%TAG7%') do (
rd /S /Q "%%D"
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM Name1 und Name2 als Unterordner
for /f "delims=" %%D in ('dir /a:d /b') do (
cd %%D
md "%FOLDER1%"
md "%FOLDER2%"
cd..
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REM Monatsordner erstellen und verschieben
MKDIR "%MONAT1%"
MKDIR "%MONAT2%"
MKDIR "%MONAT3%"
MKDIR "%MONAT4%"
MKDIR "%MONAT5%"
MKDIR "%MONAT6%"
MKDIR "%MONAT7%"
MKDIR "%MONAT8%"
MKDIR "%MONAT9%"
MKDIR "%MONAT10%"
MKDIR "%MONAT11%"
MKDIR "%MONAT12%"

REM Januar
for /f "delims=" %%D in ('dir /a:d /b *.01.*') do (
move /Y "%%D" "%MONAT1%"
)

REM Februar
for /f "delims=" %%D in ('dir /a:d /b *.02.*') do (
move /Y "%%D" "%MONAT2%"
)

REM März
for /f "delims=" %%D in ('dir /a:d /b *.03.*') do (
move /Y "%%D" "%MONAT3%"
)

REM April
for /f "delims=" %%D in ('dir /a:d /b *.04.*') do (
move /Y "%%D" "%MONAT4%"
)

REM Mai
for /f "delims=" %%D in ('dir /a:d /b *.05.*') do (
move /Y "%%D" "%MONAT5%"
)

REM Juni
for /f "delims=" %%D in ('dir /a:d /b *.06.*') do (
move /Y "%%D" "%MONAT6%"
)

REM Juli
for /f "delims=" %%D in ('dir /a:d /b *.07.*') do (
move /Y "%%D" "%MONAT7%"
)

REM August
for /f "delims=" %%D in ('dir /a:d /b *.08.*') do (
move /Y "%%D" "%MONAT8%"
)

REM September
for /f "delims=" %%D in ('dir /a:d /b *.09.*') do (
move /Y "%%D" "%MONAT9%"
)

REM Oktober
for /f "delims=" %%D in ('dir /a:d /b *.10.*') do (
move /Y "%%D" "%MONAT10%"
)

REM November
for /f "delims=" %%D in ('dir /a:d /b *.11.*') do (
move /Y "%%D" "%MONAT11%"
)

REM Dezember
for /f "delims=" %%D in ('dir /a:d /b *.12.*') do (
move /Y "%%D" "%MONAT12%"
)

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REM Überflüssige Ordner entfernen
rd /S /Q "%MONAT1%\%FOLDER1%"
rd /S /Q "%MONAT1%\%FOLDER2%"
rd /S /Q "%MONAT2%\%FOLDER1%"
rd /S /Q "%MONAT2%\%FOLDER2%"
rd /S /Q "%MONAT3%\%FOLDER1%"
rd /S /Q "%MONAT3%\%FOLDER2%"
rd /S /Q "%MONAT4%\%FOLDER1%"
rd /S /Q "%MONAT4%\%FOLDER2%"
rd /S /Q "%MONAT5%\%FOLDER1%"
rd /S /Q "%MONAT5%\%FOLDER2%"
rd /S /Q "%MONAT6%\%FOLDER1%"
rd /S /Q "%MONAT6%\%FOLDER2%"
rd /S /Q "%MONAT7%\%FOLDER1%"
rd /S /Q "%MONAT7%\%FOLDER2%"
rd /S /Q "%MONAT8%\%FOLDER1%"
rd /S /Q "%MONAT8%\%FOLDER2%"
rd /S /Q "%MONAT9%\%FOLDER1%"
rd /S /Q "%MONAT9%\%FOLDER2%"
rd /S /Q "%MONAT10%\%FOLDER1%"
rd /S /Q "%MONAT10%\%FOLDER2%"
rd /S /Q "%MONAT11%\%FOLDER1%"
rd /S /Q "%MONAT11%\%FOLDER2%"
rd /S /Q "%MONAT12%\%FOLDER1%"
rd /S /Q "%MONAT12%\%FOLDER2%"
 
Zuletzt bearbeitet:
Perfekt!

Ein ganz großes Danke für deine tolle Arbeit und Hilfe :)

PS: Ohne diesen Passus hat er aber keinen Ordner mit Datum/Wochentag erstellt und natürlich auch nicht die folgenden Unterordner mit den Namen.

Code:
set Jahr=%JAHR%
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,%MONAT%,%TAG%) To DateSerial(J,%MONAT%,%TAG%):WScript.Echo(FormatDateTime(i)):Next
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do (
 
Zuletzt bearbeitet:
Ohwe, das war dann wohl zu viel bez. zu wenig hin und her kopiert, mit dem passt natürlich :)

Code:
REM mit Powershell Wochentag zu Datum herausfinden
for /f %%j in ('powershell ^(get-date %TAG%.%MONAT%.%JAHR%^).DayOfWeek') do (
set dow=%%j

REM englische Schreibweise mit deutschen Wochentagen ersetzen
if %%j == Monday md "%TAG%.%MONAT%.%JAHR% %TAG1%"
if %%j == Tuesday md "%TAG%.%MONAT%.%JAHR% %TAG2%"
if %%j == Wednesday md "%TAG%.%MONAT%.%JAHR% %TAG3%"
if %%j == Thursday md "%TAG%.%MONAT%.%JAHR% %TAG4%"
if %%j == Friday md "%TAG%.%MONAT%.%JAHR% %TAG5%"
if %%j == Saturday md "%TAG%.%MONAT%.%JAHR% %TAG6%"
if %%j == Sunday md "%TAG%.%MONAT%.%JAHR% %TAG7%"
)
)

Funktioniert genau wie du gesagt hast ;)
 
Hallo nochmal,

ich konnte jetzt das Ganze auf unserem Server testen, leider führte es noch nicht vollends zum Erfolg.

Wenn ich das Script Manuell ausführe macht er genau was es soll, wenn ich jedoch die Batch über die Aufgabenplanung ausführen lassen möchte, funktioniert es nicht.

Das Script wird zwar ausgeführt, aber es wird nichts erstellt. Die Aufgabe wird als Administrator mit höchsten Privilegien ausgeführt, im Trigger ist der Zeitplan eingestellt und bei Aktionen ist der Pfad zur Batch angegeben. Die Batch liegt da wo auch die Ordner erstellt werden sollen.

Also irgendwie hakt es am Aufgabenplaner, vielleicht jemand eine Idee?
 
"bei Aktionen ist der Pfad zur Batch angegeben"
Hier liegen diese beiden Probleme vor:

-in der Aufgabenplanung muß bei Programm/Skript der Pfad zur cmd.exe angegeben werden und bei Argumenten ein /c mit dem Pfad zu Batch
-im Skript oder in der Aufgabenplanung muß noch in den Skript-Ordner gewechselt werden.

Entweder noch eine zusätzliche Zeile in der Batch hinzufügen:
Code:
echo off & setlocal EnableDelayedExpansion

cd "C:\TestOrdner\MeinTestOrdner"
 
REM Codepage für MÄRZ ändern
usw. usw.

und wie folgt in der Aufgabenplanung hinterlegen:
Programm/Skript : C:\Windows\SysWOW64\cmd.exe
Argumente : /c "C:\TestOrdner\MeinTestOrdner\START.bat"

oder

Batch-Skript so belassen und den Ordnerwechsel bei den Aufgabenplanungsargumenten hinterlegen:
Programm/Skript : C:\Windows\SysWOW64\cmd.exe
Argumente : /c cd "C:\TestOrdner\MeinTestOrdner" & "C:\TestOrdner\MeinTestOrdner\START.bat"

Gerade beide Varianten getestet => läuft

Anmerkung:
"Die Aufgabe wird als Administrator mit höchsten Privilegien ausgeführt"
Da als Hinweis : Statt die große Admin-Keule auf eine Aufgabe loszulassen : ein Service-Konto (welches rechte- und zugriffsmäßig aufs Minimum kastriert ist) oder ein entsprechendes Service Konto im AD anlegen
 
Hallo,

Danke für deine Antwort, ich habe es jetzt mit der 2ten Variante versucht, funktioniert einwandfrei :)

Vielen Dank nochmal

Unbenannt.png
 
Zurück
Oben