Wie erstelle ich eine Batchdatei, die für jeden Tag des Monats einen Ordner erstellt? [geschlossen]

1

Zu Beginn jedes Monats in einem Verzeichnis muss ich für jeden Tag in diesem Monat einen Ordner erstellen (im Format DDMMYYYY). Ich möchte dieses Skript einfach am ersten Tag eines jeden Monats ausführen und die Anzahl der Tage in diesem Monat berücksichtigen. Ich habe mit dem folgenden Skript herumgespielt, bin mir aber nicht sicher, wie ich es an meine Bedürfnisse anpassen kann:

Wie schreibe ich ein Batch-Skript, um Ordner für jeden Monat, Tag und Jahr zu erstellen?

Anregungen und Vorschläge werden sehr geschätzt.

Aaron
quelle
Leider sind wir kein Code-Writing-Service. Anstatt einfach nach Code für eine bestimmte Aufgabe zu fragen, zeigen Sie uns, was Sie bisher versucht haben (einschließlich des Codes, den Sie derzeit verwenden) und wo Sie stecken bleiben, damit wir Ihnen bei Ihrem spezifischen Problem helfen können. Fragen, die nur nach Code fragen, sind zu umfangreich und wahrscheinlich zu beantworten Halten oder geschlossen .
bwDraco

Antworten:

3

BEARBEITEN: ich habe vermisst DDMMYYYY Anforderung jetzt behoben.

PowerShell-Einzeiler. Öffnen Sie einfach die PowerShell-Konsole in Ihrem Verzeichnis und führen Sie Folgendes aus:

Kompakt:

1..([datetime]::DaysInMonth([datetime]::Now.Year,[datetime]::Now.Month)) | % {md ".\$(([datetime]::ParseExact("$_/$([datetime]::Now.Month)/$([datetime]::Now.Year)", 'd/M/yyyy', [System.Globalization.CultureInfo]::InvariantCulture)).ToString('ddMMyyyy'))"}

Keine Aliase:

1..([datetime]::DaysInMonth([datetime]::Now.Year,[datetime]::Now.Month)) | ForEach-Object {New-Item -ItemType Directory -Path ".\$(([datetime]::ParseExact("$_/$([datetime]::Now.Month)/$([datetime]::Now.Year)", 'd/M/yyyy', [System.Globalization.CultureInfo]::InvariantCulture)).ToString('ddMMyyyy'))"}

Für Menschen lesbar:

1..([datetime]::DaysInMonth([datetime]::Now.Year,[datetime]::Now.Month)) |
    ForEach-Object {
        New-Item -ItemType Directory -Path ".\$(([datetime]::ParseExact("$_/$([datetime]::Now.Month)/$([datetime]::Now.Year)", 'd/M/yyyy', [System.Globalization.CultureInfo]::InvariantCulture)).ToString('ddMMyyyy'))"
    }

Dies ist eher skriptartig, man müsste es als speichern CreateFolders.ps1 und von der PowerShell-Konsole wie folgt ausführen: .\CreateFolders.ps1. Kommentiert, damit Sie wirklich verstehen können, was unter der Haube passiert:

# Get current Year and Month
$CurrYear = [datetime]::Now.Year
$CurrMonth = [datetime]::Now.Month

# Create new array with numbers from 1 to DaysInMonth
1..([datetime]::DaysInMonth($CurrYear, $CurrMonth)) |
    # For each element in array
    ForEach-Object {
        # Generate name for new directory in ddMMyyyy format
        # To do so, we create new DateTime Object with day from pipeline and current year and month
        # Then we convert it to the abovementioned format
        $DirName = ([datetime]::ParseExact("$_/$CurrMonth/$CurrYear", 'd/M/yyyy', [System.Globalization.CultureInfo]::InvariantCulture)).ToString('ddMMyyyy')

        # Correctly join path with current directory and new folder name
        $Path = Join-Path -Path (Get-Location).Path -ChildPath $DirName

        # Create new directory
        New-Item -ItemType Directory -Path $Path
    }

Verwandte Frage: Rufen Sie die Anzahl der Tage im aktuellen Monat mithilfe von Powershell ab

beatcracker
quelle
-1 eigentlich habe ich vermisst DDMMYYYY Voraussetzung, werde es jetzt beheben.
beatcracker