Как создать папку и подпапку, отслеживая текущий год - PullRequest
0 голосов
/ 15 января 2019

Приведенный ниже код поражает меня ... что я пытаюсь сделать здесь - это проверка даты ... если текущей даты не существует (это 2020, а папки 2020 нет), то создайте папку 2020. В противном случае, если это 2019, а папка 2020 отсутствует, создайте папку 2020.

2-й шаг ... переход в папку ... это 2020 и нет папки 2020 \ 01 - январь ... затем скопируйте прошлогоднюю 12 - декабрь в папку 2020 \ 01 - январь ... если это 2019 и нет 2020 \ 01 - папка января, затем скопируйте 12-го декабря этого года в 2020 \ 01 - папка января.

Это то, что у меня есть ... но мой разум запутывается, пытаясь все исправить. Я почти уверен, что это второе утверждение, что моя логика может быть беспорядочной.

Я тоже не знаю, как это проверить без нового года. =)

# Edited to reflect code fix as I understand it.
$arubaBuildsRootPath = "***"
$oldMonth = "12 - December"
#$year = Get-Date -UFormat "%Y"
$year = (Get-Date).year
$newMonth = "01 - January"
$newYear = $year + 1
$oldYear = $year - 1

if( -Not (Test-Path -Path $arubaBuildsRootPath\$year ) )
{
    New-Item -ItemType directory -Path $arubaBuildsRootPath\$year
}
Else 
{
    New-Item -ItemType directory -Path $arubaBuildsRootPath\$newYear
}

if( -Not (Test-Path -Path $arubaBuildsRootPath\$year\$newMonth ) )
{
    Copy-Item -Path "$arubaBuildsRootPath\$oldYear\$oldMonth\" -Destination "$arubaBuildsRootPath\$newYear\$newMonth" -recurse -Force
}
Else 
{
Copy-Item -Path "$arubaBuildsRootPath\$year\$oldMonth\" -Destination "$arubaBuildsRootPath\$newYear\$newMonth" -recurse -Force
}

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что код $year + 1 работает не так, как вы ожидаете ... PowerShell обрабатывает вашу переменную $year как строку, поэтому + вместо этого объединяет 1.

См. Из местных испытаний:

$ (get-date -UFormat '%Y')
2019

$ (get-date -UFormat '%Y')+1
20191

$ ([int](get-date -UFormat '%Y'))+1
2020

Итак, я думаю, что если вы сделаете переменную $year целым числом, она должна работать как положено.

Еще лучше (согласно комментарию @AnsgarWiechers), просто используйте свойство Year текущей даты. Никакой специальной функции форматирования не требуется. Это также охватывает объектно-ориентированную природу PowerShell.

(Get-Date).Year + 1
...