Я пытаюсь переместить тысячи файлов в папки YYYY-MM, используя запланированное задание, которое выполняется каждую ночь. Файлы в настоящее время хранятся здесь:
C:\Users\USER\Desktop\New folder
Я хочу, чтобы они были сохранены следующим образом:
C:\Users\USER\Desktop\New folder\YYYY\MM\
Например:
C:\Users\USER\Desktop\New folder\2019\05
Скрипт создаст Папки YYYY \ MM, если они еще не существуют. Имя файла имеет следующий формат:
Status_20200116_001058.txt
Таким образом, для указанного выше файла YYYY равен 2020, а MM - 01
Я нашел сценарий PS в стеке и изменил его в ниже, но я не использовал PS много раньше и немного растерялся:
$Files_Folder = "C:\Users\USER\Desktop\New folder"
get-childitem | % {
$file = $_.FullName
$month = $date.month
$year = $date.year
new-item -type Directory -path "$Files_Folder\$year\$month"
move-item $file "$Files_Folder\$year\$month"
}
Выполнение вышеуказанного приводит к тому, что PS создает целую кучу папок и файлов в расположении выше, которое я не могу удалить:

Любая помощь будет наиболее ценной
Редактировать: Итак, я попробовал сценарий из @Wasif Hasan так:
$Files_Folder = "C:\Users\USER\Desktop\New folder1"
get-childitem | % {
$file = $_.FullName
$month = $file.substring(12, 2)
$year = $file.substring(8, 4)
$folder = Join-Path -Path "$($Files_Folder)" -ChildPath "$($Year)"
$folder = Join-Path -Path "$($folder)" -ChildPath "$($Month)"
$Exists = Test-Path "$($Folder)"
If (!$Exists) { New-Item -Type directory -Path "$($Folder)" }
Move-Item "$($File)" "$($Folder)"
}
Однако я просто получаю кучу ошибок в PS:

Редактировать: Только что попробовал скрипт @Pavithran G, исправленный для используя переменную Year и Month вместо Month и Date:
$loc = "C:\Users\nazadmin\Desktop\New folder1"
$files = Get-ChildItem -Path $loc
for ($i=0; $i -lt $files.Count; $i++)
{
$outfile = $files[$i].FullName
$filename = Split-Path -Path $outfile -Leaf -Resolve
$Year = $filename -replace "Status_\d{0}(\d{4})[\d_]*.txt",'$1'
$Month = $filename -replace "Status_\d{4}(\d{2})[\d_]*.txt",'$1'
$folder = Join-Path -Path $loc -ChildPath $Year
$folder = Join-Path -Path $folder -ChildPath $Month
$Exists = Test-Path $folder
If (!$Exists)
{
New-Item -Type directory -Path $folder
}
Move-Item $outfile $folder
}
Это отлично работает!
Редактировать: Просто понял, что если папка YY уже существует, то скрипт пытается создать другую Папка YY внутри папки YY и выдает ошибку:
Move-Item : Access to the path 'C:\Users\USER\Desktop\New folder1\2018' is denied.
At line:14 char:10
+ Move-Item <<<< $outfile $folder
+ CategoryInfo : WriteError: (C:\Users\USER...ew folder1\2018:DirectoryInfo) [Move-Item], IOException
+ FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
Любой способ избежать этой ситуации ation?
Редактировать: Опубликуем новый вопрос, чтобы сделать его понятнее Приветствия