Мой текущий сценарий PS:
$loc = "C:\Users\USER\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'
$folderYYYY = Join-Path -Path $loc -ChildPath $Year
$folderMM = Join-Path -Path $folderYYYY -ChildPath $Month
$ExistsYYYY = Test-Path $folderYYYY
$ExistsMM = Test-Path $folderMM
If (!$ExistsYYYY)
{
New-Item -Type directory -Path $folderYYYY
}
If (!$ExistsMM)
{
New-Item -Type directory -Path $folderMM
}
Move-Item $outfile $folderMM
}
Этот сценарий должен перемещать файлы, находящиеся в данный момент в каталоге $ lo c, в подпапки YYYY-MM. Если подпапка ГГГГ или ММ не существует, она создается. Если путь к подпапке уже существует, то файл перемещается в эту подпапку.
Имя файла всегда имеет следующий формат:
Status_20180215_074559.txt
Так что для указанного выше файла YYYY будет отображаться на 2018 и MM будет отображаться в 02
Из тестирования скрипта - если подпапка YYYY не существует, то скрипт отлично работает. Если подпапка YYYY уже существует, я получаю следующие пути, созданные сценарием:
C:\Users\USER\Desktop\New folder1\2018
C:\Users\USER\Desktop\New folder1\2018\02
C:\Users\USER\Desktop\New folder1\2018\2018
Файл перемещен в указанный ниже путь с помощью вышеуказанного сценария:
C:\Users\USER\Desktop\New folder1\2018\02
Я также получаю следующее сообщение об ошибке:
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
Любой способ остановить создание следующего пути:
C:\Users\USER\Desktop\New folder1\2018\2018
Кроме того, как решить возникшую ошибку?
Большое спасибо
Редактировать: пробовал скрипт @Theo, но я получаю следующие проблемы:
Затем я удалил все комментарии и пустые строки, думая, что это может вызвать проблемы где-то, но затем я получаю следующую ошибку:
Итак, после некоторой помощи от кого-то еще проблема с моим скриптом заключалась в строке $ files - он должен был искать только файлы:
$files = Get-ChildItem -Path "$loc\*.txt"
Кроме того, исправленный скрипт PS, очень услужливо предоставленный @Theo, также работает, так как я есть версия PS 2