Mit batch Verzeichnis erstellen mit aktuellem Datum

kaepten

Lt. Commander
Registriert
Apr. 2005
Beiträge
1.541
Hallo Freunde

Ich möchte ein einfaches bat erstellen, wo ich ein Verzeichnis machen kann, welches das akutelle Datum und Uhrzeit enthält.

-> Verzeichnis erstellen "archiv 3.10.2005 11:48:51"

Hat mir jemand einen Tipp?
kaepten
 
"Nichts leichter als das" sagte Frederik. "Komm mit."
Code:
REM Aktuelle Zeit holen und Doppelpunkte durch Punkte ersetzen
set CURRENTTIME=%TIME::=.%

REM Nur erste 8 Zeichen der Zeit verwenden: HH.MM.SS
set CURRENTTIME=%CURRENTTIME:~0,8%

REM Archivnamen zusammensetzen
set ARCHIVNAME=archiv-%DATE%-%CURRENTTIME%

REM Verzeichnis erstellen
mkdir %ARCHIVNAME%

[edit]
Verzeichnis- und Dateinamen dürfen keine Dopplepunkte enthalten.
 
Zuletzt bearbeitet:
Super! Vielen Dank, sehr nützlich die Ergänzung die Du noch gemacht hast!
kaepten
 
Zusatzfrage -da Du Dich sehr gut auszukennen scheinst:):

Kann man die Versionszahl einer DLL (Dateiversion / Assemblyversion) über ein DOS-Batch auslesen (und dann als Bestandteil des neuen Verzeichnisses nutzen) ?

kaepten
 
Ich kenne mich mit Batchdateien eigentlich nicht aus, aber ich kann lesen :rolleyes:.
Ich habe mir einfach mal die Hilfe zu dem DOS-Befehl set angeschaut.

Aber aus einer dll-Datei, die ja ein Binärdatei ist und keine einfache Textdatei, die Versionsnummer auslesen ist mit den mitteln, wie sie die DOS-Konsole zur Verfügung stellt nicht möglich.

Eventuell bieten fortgeschrittenere "Programmiersprachen" so etwas.
Ich denke da so an den Windows Scripting Host, oder an VBA.
Keine Ahnung was in der Windows Welt da so geboten wird.
 
Danke anyway, bin mich so batch-zeugs einfach nicht (mehr) gewohnt.
 
Das Skript ist wunderbar doch wiederspricht es natürlich unserer Formatvorlage *g* wie könnte es auch anderst sein.
Gibt es eine möglichkeit das ganze in Format
JJJJMMTT (ohne Punkte dazwischen und eben erst Jahr dann Monat und zuletzt Tag 20051201 <- so!)
Weiss hier jemand weiter?

Hier mein Ergebnis:

Code:
REM Aktuelle Zeit abrufen
set CURRENTTIME=%TIME%

REM Zusammensetzung Archivname
set ARCHIVNAME=%DATE:~6,6%%DATE:~3,3%%DATE:~0,2%

REM Verzeichnis erstellen
mkdir %ARCHIVNAME%
Ergebnis ist YYYYMM.DD sprich 200510.10 
Weiss jemand wie ich den lezten Punkt wegbekommen, dann wäre alles perfekt!?
 
Zuletzt bearbeitet:
Diese Zeile muss so aussehen:
Code:
set ARCHIVNAME=%DATE:~6,[COLOR="Red"]4[/COLOR]%%DATE:~3,[COLOR="Red"]2[/COLOR]%%DATE:~0,2%
Grund für deinen "." ist die ~x,y "Funktion".

%DATE:~6,4% bedeutet:
Nimm aus der Umgebungsvariablen %DATE% ab der 6. Stelle 4 Zeichen heraus.
%DATE% sah gestern so aus 09.10.2005
Die Stellen werden bei 0 angefangen zu zählen.
Die 6. Stelle ist somit die "2".

Für Monats- und Tagesteil musst du nun halt richtig zählen :D.
Dann weißt du warum die zwei rot markierten Stellen geändert werden müssen.
 
ist zwar schon etwas älter der thread, hat mir aber heute sehr geholfen... Danke!
 
Hallo zusammen!

Geniale Idee mit dem automatisch nach Tagesdatum erstellten Ordner. Zum Beispiel für ein automatisiertes Backup. Aber hat jemand eine Idee mit welchem Befehl ich eine vorhandene Datei automatisch per batch in einen so erstellten Ordner kopieren kann?

Nach Ausführung der batch wird ein Ordner erstellt der ja abhängig vom Tagesdatum ist (heute z.B. 20140227). Somit kann ich das Ziel ja vorher nicht exakt benennen. Weiß jemand eine Lösung?
 
Ausgehend von dem Code aus #2 z.B. so:
Code:
copy Quelldatei "%cd%\%ARCHIVNAME%\Dateiname"
Du kannst ja die Variable Archivname in der batch immer noch nutzen.
 
Tausend Dank simpsonsfan!!! :freaky:

Das funktioniert einwandfrei :-)

set CURRENTTIME=%TIME%
set ARCHIVNAME=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
mkdir %ARCHIVNAME%
copy testfile.txt "%cd%\%ARCHIVNAME%\"
 
Zwar schon etwas älter hier aber hat mir sehr geholfen.
Habe ein batch Programm gemacht um Daten einer CNC Maschine (extrem abgespecktes Win XP) direkt auf einem USB Stick zu sichern in Ordnern die nach dem Format JJJJ MM TT HH MM SS benannt sind.
Programm liegt auf dem USB Stick und wird von einer autorun.inf gestartet wenn der Stick eingesteckt wird.
Damit die Datensicherung losgeht muss noch mal bestädigt werden (Damit der Stick nicht einfach immer im PC stecken bleibt)



PHP:
@ECHO off
:START
	ECHO Soll eine Datensicherung gestartet werden? (j/n)
	SET /P x=
	IF /I "%x%" == "n" GOTO :NEIN
	IF /I "%x%" == "j" GOTO :JA


:NEIN
	COLOR 04
	ECHO Datensicherung abgebrochen
	GOTO :END



:JA	
	ECHO Aktuelle Zeit holen und evt. vorangehendes Leerzeichen durch "0" ersetzen _2:21:12,45 --* 02:21:12,45
	SET CURRENTTIME=%TIME: =0%

	ECHO Bei Zeit ohne vorangehendes Leerzeichen, Doppelpunkte durch Leerzeichen ersetzen HH:MM:SS,00 --* HH MM SS,00
	SET CURRENTTIME1=%CURRENTTIME::=" "%

	ECHO Nur die ersten 8 [12 mit " und Leerzeichen] Zeichen der Zeit verwenden: HH MM SS,00 --* HH MM SS
	SET CURRENTTIME2=%CURRENTTIME1:~0,12%

	ECHO Verzeichnisnamen zusammensetzen
	SET ARCHIVNAME=%DATE:~6,4%" "%DATE:~3,2%" "%DATE:~0,2%" "%CURRENTTIME2%

	ECHO Verzeichnis erstellen
	MKDIR %ARCHIVNAME%
	
	ECHO Ordner, Unterordner und Dateien in das neu angelegte Verzeichniss kopieren
	XCOPY ""D:\Programm\DRW" %ARCHIVNAME% /E /I
	
	COLOR 02
	ECHO Datensicherung ausgeführt !!!
	
	GOTO :END

:END 
	PAUSE


Ich hoffe das hilft noch wem anders weiter.
am schwierigsten war es das Zeitformat für die Verzeichnise hinzubekommen
habe da jetzt über 10h dran gesessen von der ersten Idee bis alles so funktioniert hat wie ich es mir Vorgestellt habe (Stick rein > Datensicherung wird ausgeführt)

MFG
 
Hallo zusammen,

der Thread ist zwar schon etwas älter, aber ich hätte hier auch ein ähnliches anliegen. Ich hoffe mir kann damit jemand weiterhelfen.

Hier eine kurze Auflistung was durch eine Batch (Windows 2016 Server) erstellt werden sollte, wenn dies so möglich ist:

Eine automatische Erstellung von folgender Ordnerstruktur inkl. Unterordnern:

2021 (Hauptordner)

Januar (Unterordner)
01.01.2021 Freitag (weiterer Unterordner)
Name1 (weiterer Unterordner)
Name2 (weiterer Unterordner)
02.01.2021 Samstag (weiterer Unterordner)
Name1 (weitere Unterordner)
Name2 (weitere Unterordner)

Usw. bis Monatsende

Falls es sogar machbar ist, könnten Samstage und Sonntage ausgeschlossen werden, da diese nicht nötig sind.

Hier ein Beispiel wie es als Pfad aussehen würde:

2021\Januar\01.01.2021 Freitag\Name1

Soweit wäre das schon mal Klasse, wenn das jemand hinbekommt.

Natürlich werden die restlichen Monate ebenfalls benötigt, jedoch nicht in einer Batch, sondern in 12 separaten. Der Hintergrund ist, dass jeder Monat einzeln automatisch in der Aufgabenplanung (am letzten Tag im Monat) automatisch erstellt werden soll, dies dient zur Übersicht welche gewünscht wird. Falls dies ebenfalls in nur einer Batch möglich wäre, nur zu gern.

Für eure Hilfe wäre ich mehr als Dankbar :)
 
Hier wäre PowerShell die bessere Option.
Kennst du dich mit PS aus und muss es unbedingt Batch sein?

Ich habe irgendwo mal in einem anderen Thread den Spruch "Batch is a Bitch" aufgeschnappt und da ist sicher was dran.

Noch ein Hinweis:
Hier wird dir wohl niemand einen fertigen Code erstellen, den du dann ungesehen verwenden kannst.
Du solltest deshalb im Sinne von Eigeninitiative zumindest erste Ansätze eines selbst erstellten Codes präsentieren.

Hier mal ein erster Ansatz mit PS zu deinem Anliegen:

PowerShell:
If (-Not(Test-Path "C:\2021\Januar\01.01.2021 Freitag\Name1"))
{
 New-Item "C:\2021\Januar\01.01.2021 Freitag\Name1" -Type Directory
}
 
Danke für deine rasche Antwort.

Bei meinen ersten Recherchen mit Google unter den Stichworten „Ordner automatisch mit Datum erstellen“ bin ich immer wieder auf das Erstellen einer Batch Datei gestoßen bez. dies mit Exel zu erstellen.

Das habe ich dann auch versucht (Batch), mein bisheriger Erfolg war in dieser Richtung das er mir damit 365 Ordner mit fortlaufenden Datum erstellt hat.

Code:
@echo off & setlocal
set /a Jahr=2011
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,1,1) To DateSerial(J,12,31):WScript.Echo FormatDateTime(i):Next
for /f %%i in ('cscript //nologo %G% %Jahr%') do md %%i

Alternativ:

for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do md %%c-%%b-%%a

Die Änderung vom Datumsformat ist zwar besser zum Sortieren, aber da ich es monatlich in einem Ordner benötige für mich nicht Relevant:

Nach weiteren Recherchen, wegen dem Wochentag der dahinterstehen sollte, wurde es kompliziert und es war die Rede das dies mit Batch/Exel nicht wirklich machbar ist und man auf VBS oder PS ausweichen sollte.

Die Anschließende Suche damit war recht ernüchternd und ich muss zugeben das dies auch mein Verständnis übersteigt. Ich kenne mich leider mit diesen Dingen nicht aus und muss daher auf Foreneinträge zurückgreifen die aber natürlich nicht so explizit ins Detail gehen wie ich es am Ende benötige.

Ich bin durchaus gewillt dazu zu lernen und zu Recherchieren, aber hier muss ich dann leider wohl doch passen.
 
@ Ossimann
Quick&Dirty Dein Skript erweitert.

Erstelle zwei Batch-Dateien (Name kann natürlich frei gewählt werden):
Ordner_mit_Datum_erzeugen.bat
Code:
@echo off & setlocal EnableDelayedExpansion 
set /a Jahr=2021
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,1,1) To DateSerial(J,12,31):WScript.Echo(FormatDateTime(i)):Next
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do (

for /f %%j in ('powershell ^(get-date %%a.%%b.%%c^).DayOfWeek') do (
set dow=%%j

if %%j == Monday md "%%a.%%b.%%c Montag"
if %%j == Tuesday md "%%a.%%b.%%c Dienstag"
if %%j == Wednesday md "%%a.%%b.%%c Mittwoch"
if %%j == Thursday md "%%a.%%b.%%c Donnerstag"
if %%j == Friday md "%%a.%%b.%%c Freitag"
if %%j == Saturday md "%%a.%%b.%%c Samstag"
if %%j == Sunday md "%%a.%%b.%%c Sonntag"

)
REM pause entfernen und das Skript läuft komplett durch
pause
)

Unterordner_erstellen.bat
Code:
@echo off
for /f "delims=" %%D in ('dir /a:d /b') do (
cd %%D
md Name1
md Name2
cd..
)


=Handhabung:

-einen Hilfsordner erstellen

-die beiden Batch-Dateien dort hinein kopieren

-In der Datei "Ordner_mit_Datum_erzeugen.bat" folgende Änderungen vornehmen:
-Jahreszahl
-Da Windows aufgrund der Pfadlänge Probleme bekommen kann, die Wochentage abkürzen (MO, DI, MI usw.), statt voll ausgeschrieben (Montag, Dienstag, usw.)
-die Zeile "pause" entfernen (damit das Skript komplett automatisch durchläuft)

-Die Datei "Unterordner_erstellen.bat" erstellt in sämtlichen Ordnern (also : Vorsicht), die Unterordner Name1 und Name2. Hier natürlich die Namen entsprechend anpassen.

Somit ist "01.01.2021 Freitag\Name1" dargestellt.
Die Ordner Januar bis Dezember selber erstellen und die Ordner entsprechend hineinverschieben
 
Zuletzt bearbeitet:
@ ryan

Also das hat soweit schon mal alles geklappt wie du beschrieben hast, Danke.

Zum Testen habe ich einfach mal die 2te Batch an die 1te angefügt und siehe da, nun erstellt er direkt am Ende in jedem Ordner mit Datum auch die jeweiligen Ordner mit Namen.

So sieht jetzt die Batch aus:

Code:
@echo off & setlocal EnableDelayedExpansion
set /a Jahr=2021
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,1,1) To DateSerial(J,12,31):WScript.Echo(FormatDateTime(i)):Next
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do (

for /f %%j in ('powershell ^(get-date %%a.%%b.%%c^).DayOfWeek') do (
set dow=%%j

if %%j == Monday md "%%a.%%b.%%c Montag"
if %%j == Tuesday md "%%a.%%b.%%c Dienstag"
if %%j == Wednesday md "%%a.%%b.%%c Mittwoch"
if %%j == Thursday md "%%a.%%b.%%c Donnerstag"
if %%j == Friday md "%%a.%%b.%%c Freitag"
if %%j == Saturday md "%%a.%%b.%%c Samstag"
if %%j == Sunday md "%%a.%%b.%%c Sonntag"
)
)
@echo off
for /f "delims=" %%D in ('dir /a:d /b') do (
cd %%D
md Name1
md Name2
cd..
)

Jetzt habe ich das noch mit dem löschen der Samstag/Sonntage gesucht und habe folgendes gefunden bez. angepasst, aber irgendwo ist noch der Wurm drin, es passiert nix nach dem ausführen:

Code:
for /f "tokens=*" %i in ('dir C:\Neuer Ordner /A:D /B /S^|find "Samstag;Sonntag"') do RD /S /Q %i
 
Vermutung auf die Schnelle:
Wenn Du die Passage in eine Batch einbaust, so muß aus %i ein %%i werden (doppeltes Prozentzeichen)

Anmerkung zum Skript: Wenn dieser Teil ausgetauscht wird, so kann man das Jahr beim Start angeben (z.B. 2021):
Code:
@echo off & setlocal EnableDelayedExpansion 

REM Benutzereingabe Jahreszahl
SET /P EINGABE="Bitte Jahreszahl angeben (z.B. 2021):

set Jahr=%EINGABE%
set G=%temp%\GetDates.vbs


Namesteile eines Ordners können wie folgt gesucht und gelöscht werden:

Samstag_Sonntag_entfernen.bat
Code:
@echo off
REM Samstag löschen
for /f "delims=" %%D in ('dir /a:d /b *Samstag') do (
rd /S /Q "%%D"
)

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


Der Monat 01, 02 usw. kann wie folgt ausgelesen werden. Der Umlaut im März macht bei Batch Probleme. Da müsste mit Codepage gearbeitet werden (chcp). Das ist mir jetzt zuviel Arbeit, es herauszusuchen ^-^

In_Monat_verschieben.bat
Code:
@echo off
REM Monatsordner erstellen
MKDIR "JANUAR"
MKDIR "FEBRUAR"
MKDIR "MAERZ"
MKDIR "APRIL"
MKDIR "MAI"
MKDIR "JUNI"
MKDIR "JULI"
MKDIR "AUGUST"
MKDIR "SEPTEMBER"
MKDIR "OKTOBER"
MKDIR "NOVEMBER"
MKDIR "DEZEMBER"

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

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

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

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

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

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

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

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

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

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

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

REM Dezember
for /f "delims=" %%D in ('dir /a:d /b *.12.*') do (
move /Y "%%D" "DEZEMBER"
)
 
Zuletzt bearbeitet:
Einfach Klasse, vielen vielen Dank.

Eine Frage hätte ich noch, die aber nur das "i" - Tüpfelchen wäre :)

Könnten wir unsere Batch so umgestalten, das nicht auf einmal alle 365 Tage erstellt werden, sondern der jeweilige Ordner mit Datum und Wochentag erst zum aktuellen Tagesdatum, z.b. Morgens um 03:00 erstellt wird?

Quasi so, das sich jeder Tag im Jahr aufeinander aufbaut. Der Monatsordner wird wohl nicht möglich sein, aber das ist dann wirklich nicht mehr so wichtig.

2021 (bereits vorhanden)
Ordner für alle 12 Monate erstellen (wenn bereits vorhanden, ignorieren)
Ordner mit aktuellem Datum und Wochentag erstellen
Unterordner mit Name1 usw. erstellen
Lösche Samstag/Sonntag
Verschiebe Ordner mit Datum und Wochentag in den richtigen Monat

So könnte ich über die Aufgabenplanung die Batch täglich um 03:00 ausführen lassen.

Ich hoffe das war jetzt verständlich beschrieben ;)

Code:
@echo off & setlocal EnableDelayedExpansion
REM Das richtige Jahr eingeben
set /a Jahr=2021
set G=%temp%\GetDates.vbs
>%G% echo J=WScript.Arguments(0):For i=DateSerial(J,1,1) To DateSerial(J,12,31):WScript.Echo(FormatDateTime(i)):Next
for /f "tokens=1-3 delims=." %%a in ('cscript //nologo %G% %Jahr%') do (

for /f %%j in ('powershell ^(get-date %%a.%%b.%%c^).DayOfWeek') do (
set dow=%%j

if %%j == Monday md "%%a.%%b.%%c Montag"
if %%j == Tuesday md "%%a.%%b.%%c Dienstag"
if %%j == Wednesday md "%%a.%%b.%%c Mittwoch"
if %%j == Thursday md "%%a.%%b.%%c Donnerstag"
if %%j == Friday md "%%a.%%b.%%c Freitag"
if %%j == Saturday md "%%a.%%b.%%c Samstag"
if %%j == Sunday md "%%a.%%b.%%c Sonntag"
)
)
REM Unterordner in jedem Tag erstellen
@echo off
for /f "delims=" %%D in ('dir /a:d /b') do (
cd %%D
md Name1
md Name2
md Name3
md Name4
md Name5
md Name6
md Name7
md Name8
md Name9
md Name10
cd..
)
@echo off
REM Samstag löschen
for /f "delims=" %%D in ('dir /a:d /b *Samstag') do (
rd /S /Q "%%D"
)

REM Sonntag löschen
for /f "delims=" %%D in ('dir /a:d /b *Sonntag') do (
rd /S /Q "%%D"
)
@echo off
REM Monatsordner erstellen
MKDIR "01 Januar"
MKDIR "02 Februar"
MKDIR "03 Maerz"
MKDIR "04 April"
MKDIR "05 Mai"
MKDIR "06 Juni"
MKDIR "07 Juli"
MKDIR "08 August"
MKDIR "09 September"
MKDIR "10 Oktober"
MKDIR "11 November"
MKDIR "12 Dezember"

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

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

REM Einzelne Wochentage in passenden Monat verschieben
for /f "delims=" %%D in ('dir /a:d /b *.03.*') do (
move /Y "%%D" "03 Maerz"
)

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

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

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

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

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

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

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

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

REM Einzelne Wochentage in passenden Monat verschieben
for /f "delims=" %%D in ('dir /a:d /b *.12.*') do (
move /Y "%%D" "12 Dezember"
)
 
Zurück
Oben