feuerflorian
Goto Top

Batch-Datei zur Erstellung von Ordnern nach einem ganz besonderen System

Guten Tag!

Ich möchte eine Batch-Datei erstellen, die folgendes tut:

Ich möchte ganz viele Ordner erstellt bekommen, die einem Muster folgen. Der Ordnername soll der zu Beginn eine vierstellige Nummer, dann ein Leerzeichen, dann einen Bindestrich, dann ein bestimmtes Datum haben. Dann sollen immer weiter Ordner erstellt werden, die dem Muster folgen:

0001 - 2000-01-01
0002 - 2000-01-02
... usw.

Natürlich sollen die richtigen Nummern zum jeweils richtigen Datum passen.
Sprich: Wenn der Januar 2000 genau 31 Tage hatte, dann soll es auch 0031 - 2000-01-31 und dann erst 0032 - 2000-02-01 geben ... usw.

Ich möchte zudem gerne, dass die damit erstellten Ordner sofort in ein jeweils passendes Unterverzeichnis verschoben werden:

Dieses soll so aussehen

"2000-01 - Januar 2000"
"2000-02 - Februar 2000"
... usw.

Wichtig wäre auch noch, dass ich zuvor "gefragt" werde oder "einfach" eingeben kann, welches Jahr ich erstellen möchte ... Ob dazu die Eingabe der Zahl nötig ist, mit der ich starten möchte - oder das Programm selbst weiß, dass das Jahr 2000 zum Beispiel 366 Tage hatte, da bin ich mir unsicher und überlasse es den Fachleuten - also Euch.

Vielen Dank für Eure Hilfe!

Hintergrund meiner Frage: Ich stehe vor dem Nichts und kann daher auch keine Programmierer bezahlen ... Daher bitte ich hier um Hilfe. Ich habe schon verschiedene Hilfen für Ordner mit Datum im Netz gefunden - aber ich scheitere an den vier Nummern zuvor... Ich hatte dafür sogar einmal eine batch-datei "bekommen" / "gefunden" - aber die ist mit auf den geklauten Festplatten ... :'(

Also: Vielen Dank!!!!
Florian.

Content-Key: 485492

Url: https://administrator.de/contentid/485492

Printed on: April 19, 2024 at 11:04 o'clock

Mitglied: 77559
Solution 77559 Aug 15, 2019 at 17:17:52 (UTC)
Goto Top
Moin, moin.

Es ist mMn nicht sehr pfiffig Ordner zu erstellen und sie dann zu verschieben.
Lieber gleich die richtige Struktur erzeugen zumal der md/mkdir Befehl in aktuellen Windows Versionen mit standardmäßig aktivierten Erweiterungen die nötigen Zwischenverzeichnisse in einem Schritt erstellt.

Wenn das mit Batch passieren soll, schau dir mal die Date/Time Funktionen von Ritchie Lawrence Batch Library an.

Einfacher geht es mit einer aktuellen Script Sprache wie PowerShell.

Soll die Tages Nummerierung pro Jahr oder fortlaufend ab 2000-01-01 erfolgen?

bei 4 Stellen wäre dann

PoSh> (get-date 2000-01-01).AddDays(9999)                                                                                               
Dienstag, 18. Mai 2027 00:00:00

Schluss.

Gruß
LotPings
Member: feuerflorian
feuerflorian Aug 15, 2019 at 17:38:55 (UTC)
Goto Top
... vielen Dank für die Hinweis. Bin leider überhaupt nicht firm.
Die Frage verstehe ich leider nicht ganz.
Wenn "alles" stimmt, dann sollte er diesen Ordner für "heute" erstellen:

7167 - 2019-08-15

Ist damit die Frage beantwortet? Danke!

PS: Wie er was macht und verschiebt, ist mir ehrlich gesagt egal ;) Wenn er einen Ordner für den Monat erstellt, dann darin die Ordner für die Tage - super .... ;) Dann fehlt ja nur noch, dass er für die Monate auch noch den übergeordneten erstellt ... "2000", "2001"... usw.

Ein Hinweis noch: Ob die Zahl 7167 stimmt, ist nicht sicher, da die alten Daten ja weitestgehend weg sind :/

Danke!
Mitglied: 77559
Solution 77559 Aug 15, 2019 at 18:57:06 (UTC)
Goto Top
Den folgenden Code anpassen ($Basefolder/$Day in x..y) und in einer Datei mit der Endung .ps1 abspeichern und mit PowerShell ausführen.

$BaseFolder = 'A:\Test'  

# Jahr 2019 = ForEach($Day in 6941..7305){

ForEach($Day in 1..99){
MD ('{0}\{1:yyyy\\yyyy-MM - MMMM yyyy\\}{2:D4} - {1:yyyy-MM-dd}' -f `  
    $BaseFolder,(Get-Date 1999-12-31).AddDays($Day),$Day) #-WhatIf
}

Das erzeugt eine solche Struktur:
PoSh> tree A:\Test
A:\TEST
└───2000
    ├───2000-01 - Januar 2000
    │   ├───0001 - 2000-01-01
    │   ├───0002 - 2000-01-02
    │   ├───0003 - 2000-01-03
    │   ├───0004 - 2000-01-04
%<............................>%
    │   ├───0029 - 2000-01-29
    │   ├───0030 - 2000-01-30
    │   └───0031 - 2000-01-31
    ├───2000-02 - Februar 2000
    │   ├───0032 - 2000-02-01
    │   ├───0033 - 2000-02-02
%<............................>%
    │   ├───0058 - 2000-02-27
    │   ├───0059 - 2000-02-28
    │   └───0060 - 2000-02-29
    ├───2000-03 - März 2000
    │   ├───0061 - 2000-03-01
    │   ├───0062 - 2000-03-02
    │   ├───0063 - 2000-03-03
%<............................>%
    │   ├───0089 - 2000-03-29
    │   ├───0090 - 2000-03-30
    │   └───0091 - 2000-03-31
    └───2000-04 - April 2000
        ├───0092 - 2000-04-01
        ├───0093 - 2000-04-02
        ├───0094 - 2000-04-03
%<............................>%
        └───0099 - 2000-04-08
Member: feuerflorian
feuerflorian Aug 15, 2019 at 23:24:52 (UTC)
Goto Top
Danke! Grandios! Sie sind mein zweiter Held am heutigen Tage!!! Vielen vielen Dank!
Mitglied: 140777
140777 Aug 16, 2019 updated at 09:34:45 (UTC)
Goto Top
Oder wenn man nicht mit erst zu berechnenden Zahlen hantieren möchte
$year = 2019
$folder = 'D:\Basefolder'  
0..(@{$true=365;$false=364}[[datetime]::IsLeapYear($year)]) | %{
    md ("{0}\{1}\{2:yyyy-MM - MMMM yyyy}\{3:D4} - {2:yyyy\-MM\-dd}" -f $folder,$year,(get-date -Year $year -Month 1 -Day 1).AddDays($_),($_+1))  
}
Member: NetzwerkDude
NetzwerkDude Aug 16, 2019 at 08:35:34 (UTC)
Goto Top
Aber dann bitte auch in deiner nächsten Publikation dafür sorgen das dieses Forum mehr fame bekommt face-smile
Mitglied: 77559
77559 Aug 20, 2019 at 16:38:57 (UTC)
Goto Top
Moin moin,

coding der Knackpunkt bei der Tagesnumerierung war doch, das die vom 1.1.2000 durchlaufen sollte,
nicht pro Jahr - da hätte ja ein simples (Get-Date).DayOfYear ausgereicht.

2000..2027|ForEach-Object{
    [PSCustomObject]@{
        Jahr=$_
        'Jan 1, Tage kum'=((Get-Date -year $_ -month 1 -Day 1) - (Get-Date 1999-12-31)).Days  
        'Dez 31, Tage kum'=((Get-Date -year $_ -month 12 -Day 31) - (Get-Date 1999-12-31)).Days  
        'Dez 31, DoY'=(Get-Date -year $_ -month 12 -Day 31).DayOfYear  
    }
}

Jahr Jan 1, Tage kum Dez 31, Tage kum Dez 31, DoY
---- --------------- ---------------- -----------
2000               1              366         366
2001             367              731         365
2002             732             1096         365
2003            1097             1461         365
2004            1462             1827         366
2005            1828             2192         365
2006            2193             2557         365
2007            2558             2922         365
2008            2923             3288         366
2009            3289             3653         365
2010            3654             4018         365
2011            4019             4383         365
2012            4384             4749         366
2013            4750             5114         365
2014            5115             5479         365
2015            5480             5844         365
2016            5845             6210         366
2017            6211             6575         365
2018            6576             6940         365
2019            6941             7305         365
2020            7306             7671         366
2021            7672             8036         365
2022            8037             8401         365
2023            8402             8766         365
2024            8767             9132         366
2025            9133             9497         365
2026            9498             9862         365
2027            9863            10227         365
Mitglied: 140777
140777 Aug 20, 2019 updated at 17:42:27 (UTC)
Goto Top
Zitat von @77559:

Moin moin,

coding der Knackpunkt bei der Tagesnumerierung war doch, das die vom 1.1.2000 durchlaufen sollte,
nicht pro Jahr -
Kann ich nirgendwo in seinem Post so nachlesen.

Er schrieb ja das er das Jahr selbst bestimmen möchte welches er erzeugen will. Zitat:
Wichtig wäre auch noch, dass ich zuvor "gefragt" werde oder "einfach" eingeben kann, welches Jahr ich erstellen möchte ...

Naja jeder wie er will und mag, kann er ja selbst entscheiden .
Member: feuerflorian
feuerflorian Aug 22, 2019 at 08:31:15 (UTC)
Goto Top
... vielen Dank - mir hat das sehr geholfen und mein Problem gibt es nicht mehr.

Noch einmal großes Dankeschön für die tolle und mega schnelle Hilfe!