解决方法,将Destination参数作为powershell中的脚本块编写

问题描述 投票:1回答:2

我的组织在整个网络的不同文件夹中都有很多图片文件。我一直想通过它们所在的项目文件夹将它们合并到“ 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:无法评估参数“目标”,因为其参数被指定为脚本块,并且没有输入。一种没有输入就无法评估脚本块。

而且我不知道如何在不将目标写为脚本块的情况下编写此代码

任何帮助将不胜感激

powershell concatenation filepath
2个回答
0
投票

尝试像这样传递目标参数:

-Destination $(. { script_block_body_here })

()。 {}是点源运算符,$()是子表达式运算符。


0
投票
($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 
         }
    }
}

找到了解决方法,可以将脚本块用作目标参数。用过的if ((compare-object (split-path $Rouge.directoryname -leaf) $MainFolders[$a] -IncludeEqual).sideindicator -eq '==')

复制文件夹copy-Item $_.DirectoryName -Destination "C:\Folders\PictureLibrary"以查找与图片所在的文件夹匹配的文件夹后。如果找到与'=='匹配的文件夹,则move-item将移动这些文件。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.