Como eu crio um arquivo de lote que criará uma pasta para cada dia do mês? [fechadas]

1

No início de cada mês dentro de um diretório, eu preciso criar uma pasta para cada dia daquele mês (no formato de DDMMAAAA). Gostaria de executar este script no primeiro dia de cada mês e contabilizar o número de dias no mês. Eu brinquei com o seguinte script, mas não sei como personalizá-lo para atender às minhas necessidades:

Como escrevo um script em lote para gerar pastas para cada mês, dia e ano?

Qualquer pensamento / sugestão é muito apreciado.

    
por Aaron 20.03.2015 / 14:45

1 resposta

3

EDITAR: perdi DDMMYYYY requisito, corrigido agora.

Um-liners de Powershell. Basta abrir o console do PowerShell em seu diretório e executar:

Compact:

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'))"}

Nenhum alias:

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'))"}

legível:

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'))"
    }

Isso é mais como um script, você teria que salvá-lo como CreateFolders.ps1 e executar a partir do console do PowerShell assim: .\CreateFolders.ps1 . Comentou, para que você possa realmente entender o que está acontecendo:

# 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
    }

Pergunta relacionada: Obtenha o número de Dias no mês atual usando o powershell

    
por 20.03.2015 / 14:58