1

В начале каждого месяца в каталоге мне нужно создать папку для каждого дня в этом месяце (в формате DDMMYYYY). Я хотел бы просто запустить этот скрипт в первый день каждого месяца и учесть количество дней в указанном месяце. Я поиграл со следующим скриптом, но не уверен, как настроить его под свои нужды:

Как мне написать пакетный скрипт для создания папок для каждого месяца, дня и года?

Любая мысль / предложения с благодарностью.

1 ответ1

3

РЕДАКТИРОВАТЬ: я пропустил требование DDMMYYYY , исправлено сейчас.

Powershell один вкладыш. Просто откройте консоль PowerShell в вашем каталоге и запустите:

Компактность:

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

Без псевдонимов:

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

Человек читаемый:

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

Это больше сценариев , как, вы должны сохранить его как CreateFolders.ps1 и работать с PowerShell консоли , как .\CreateFolders.ps1 . Прокомментировал, чтобы вы могли реально понять, что происходит под капотом:

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

Связанный вопрос: Получить количество дней в текущем месяце с помощью powershell

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .