Обходной путь для написания аргумента Destination в виде блока скрипта в powershell - PullRequest
1 голос
/ 03 февраля 2020

В моей организации много файлов изображений в разных папках по всей сети. Я пытался объединить их в папке «PictureLibrary» по папке проекта, в которой они находятся. Поскольку в этих папках проекта есть другие файлы, кроме файлов изображений, я не могу просто переместить всю папку. Я пробовал код ниже:

    ($Images = gci "Z:\DivisionFolder" -Recurse -file -Include "*.jpg") |
        Foreach-object {
        copy-Item $_.DirectoryName -Destination "Z:\DivisionFolder\PictureLibrary"
        }
$a=0
For ($a; $a -lt $Images.count; $a++){
    move-item $Images[$a].fullname -Destination {join-path -Path "D:\(1) PROJECTS & PORTFOLIOS\PictureLibrary" -ChildPath $Images[$a].Directoryname}
    }

Я пробовал его в различных форматах, но получаю эту ошибку

Copy-Item: Невозможно оценить параметр 'Destination', потому что его аргумент указывается в виде блока скрипта, и ввод отсутствует. Блок сценария не может быть оценен без ввода.

, и я не могу понять, как написать это без записи места назначения в виде блока сценария

Любая помощь будет очень признательна

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020
($RougePictures = Get-Childitem -Path "C:\" -recurse -file -Include "*.JPG")|
   Foreach-object {
        copy-Item $_.DirectoryName -Destination "C:\Folders\PictureLibrary"
    }
$MainFolders = get-childitem -Path "D:\(1) PROJECTS & PORTFOLIOS\PictureLibrary"       

$a=0
For ($a; $a -lt $MainFolders.count; $a++) {
    Foreach ($Rouge in $RougePictures){
        if ((compare-object (split-path $Rouge.directoryname -leaf) $MainFolders[$a] -IncludeEqual).sideindicator -eq '=='){
             move-item $Rouge.fullname -destination $MainFolders[$a].fullname 
         }
    }
}

Найден обходной путь использования блока Script в качестве целевого аргумента. Использовал if ((compare-object (split-path $Rouge.directoryname -leaf) $MainFolders[$a] -IncludeEqual).sideindicator -eq '==')

после того, как я скопировал папки copy-Item $_.DirectoryName -Destination "C:\Folders\PictureLibrary", чтобы найти те, которые соответствуют папкам, в которых находятся изображения. Если найдено совпадение '==', move-item перемещает эти файлы. Надеюсь, это поможет.

0 голосов
/ 03 февраля 2020

Попробуйте передать аргумент назначения следующим образом:

-Destination $(. { script_block_body_here })

(). {} является оператором поиска точек, а $ () - оператором выражения выражений.

...