Как переместить файл с именем на основе имени папки во вложенную папку в той же папке

Я уже некоторое время борюсь и надеялся, что кто-нибудь сможет мне помочь.

У меня есть куча файлов * .pdf, из которых имя файла содержит также имя папки, в которую файлы должны быть перемещены. Код, который я нашел, работает хорошо:

      $Folder = "C:\Users\Bob\Desktop\Scripting\Bronmap"
$FileType = "*.pdf"
$Files = Get-ChildItem -Path $Folder -Filter $FileType

$RE = [regex]((Get-ChildItem -Path $Folder -Directory -Name) -Join '|')
ForEach($file in $Files){
    if ($file.BaseName -Match $RE){
        $file | Move-Item -Destination (Join-Path $Folder  $Matches[0] )
    } 
    else {
        $file | Move-Item -Destination (Join-Path $Folder "No_Folder")
    }
} 

Я бы хотел, чтобы файл был перемещен в подпапку в названной папке с определенным именем «Контракты». Например:

      $file | Move-Item -Destination (Join-Path $Folder  $Matches[0] "Contracts" )

Хотя подпапка существует, я не могу заставить ее работать. Любая помощь высоко ценится.

1 ответ

принимает два аргумента, $Folders а также $Matches[0] в вашем случае так "Contracts" не должно быть там.

Вы можете использовать Join-Path дважды:

      (Join-Path (Join-Path $Folder $Matches[0]) "Contracts")

или объедините контракты вручную:

      (Join-Path $Folder ($Matches[0] + "\Contracts"))
Другие вопросы по тегам