В вашем for-each l oop вы не определяете никаких чисел или списка до go over. Вам нужно определить числа, такие как 1 - 12 (для месяцев), чтобы выполнить итерацию и создать папки на основе этих чисел. Я использовал (1..12)
, что примерно так же, как и для l oop, for (int i = 0; i< 12; i++)
.
Кроме того, пока вы перебираете эти числа, вы можете использовать опцию форматирования, чтобы использовать 01 вместо 1 при создании папок для согласованности в именах. Для этого используйте опцию -f ("0:d2" -f 1)
. Найти подробности о форматировании здесь
Еще одна проблема, которую я заметил, заключалась в том, что вы использовали полный путь в качестве имени папки при создании папки. Вам нужно только указать имя в параметре -Name
, поскольку вы уже вводите Path
. Для этого изменено $curryear
назначение.
$folderpath = "C:\Temp\Date"
Do
{
$curryear = Read-Host -Prompt "Enter the year for the folder structure: "
If (Test-Path -Path (Join-Path $folderpath $curryear*))
{
$existingFolder = $true
Write-Host "Folder exists"
}
Else
{
$existingFolder = $false
(1..12) | ForEach-Object {
$month = curryear + ("_{0:d2}" -f $_)
New-Item -Path $folderpath -ItemType Directory -Name $month |Out-Null
Write-Host "Creating folder name " $month
}
}
} While ($existingFolder)
Еще одним вариантом вышеописанного является продолжение создания папок, пока вы не напишите quit. Если подпапка года, которая уже была создана ранее, была удалена, этот процесс будет работать и создавать только отсутствующие папки.
$folderpath = "C:\Temp\Date"
While ($true)
{
$curryear = Read-Host -Prompt "Enter the year for the folder structure (quit): "
if ($curryear -eq "quit") {
break
}
(1..12) | ForEach-Object {
$month = $curryear + ("_{0:d2}" -f $_)
try {
New-Item -Path $folderpath -ItemType Directory -Name $month -ea Stop |Out-Null
Write-Host "Creating folder name " $month
}
catch{
Write-Host "Folder $month already exists"
}
}
}