0

嘿,我对 PowerShell 相当陌生,我正在尝试创建一个电影传输脚本。我创建了一个脚本,它将列出我的电影文件夹中的子项目并将它们转储到 .csv。然后,最终用户将能够选择 .csv 中的文件并将“y”放在另一列中。然后,我将运行 Powershell 脚本以使用“y”列过滤掉他们的选择,并将项目比较并复制到单独的文件夹/驱动器。

我在将 .csv 与保存电影的原始文件夹进行比较然后将它们复制到另一个文件夹时遇到了一些问题。我的脚本一次只能使用 [0] 等查找和复制一个数组项。

这是我的 export-csv 脚本(没有问题)和我的复制项脚本(有问题)的示例

导出-CSV.ps1

$Movies = "D:\Media\Movies"

Get-ChildItem $Movies | select name,y | Export-Csv D:\Media\Media_Scripts\Movies.csv -NoTypeInformation

以及输出 .csv 文件的图像

电影.csv

COPY-ITEM.ps1 有效,但仅当我在 $csv_name 之后的 [] 中添加单个数组编号时。这并不理想,因为我想递归并将所有选定的文件夹复制到新位置

$Csv_loc = "D:\Media\Media_Scripts\"
$Movies_loc = "D:\Media\Movies\"
$Test = "D:\Media\Media_Scripts\Test\"

$csv = Import-Csv "$csv_loc\Movies.csv" | Where-Object{$_.y -eq "y"} | select name

$csv_name | foreach($_)
{ 
Get-ChildItem $movies_loc | Where-Object {$_.Name -contains $csv_name[0]} | copy-item -Destination $Test -Recurse -Verbose
}
4

2 回答 2

0

嘿,谢谢你们的帮助。对于我的问题不太清楚,我深表歉意,感谢您花时间帮我看一下。我通过外部资源得到了一些澄清,完成我想要实现的目标的脚本是这样的;

$movies_loc = gci "D:\Media\Movies" -Recurse
$Dest = "D:\Media\Media_Scripts\Test"

$csv_name = import-csv "D:\Media\Media_Scripts\Movies.csv" | ? {$_.y -eq "y"} | Select -ExpandProperty name

foreach($csv_n in $csv_name){

    foreach ($movie_loc in $movies_loc){

    if("$movie_loc" -contains "$csv_n"){

    Copy-Item -Path "D:\Media\Movies\$movie_loc" -Destination $Dest -Recurse -Verbose

    }
  }
}
于 2017-12-11T10:26:38.097 回答
0

我认为您似乎正在获取一个数组并且无法解析要复制的名称。

$MoviesPath = "C:\Setup\Movies"

Get-ChildItem C:\setup\Movies | select Name, Available | Export-Csv C:\Setup\Movies.csv -Delimiter "|" -NoTypeInformation -Encoding UTF8

我对分隔符进行了一些更改,因为我不使用默认值。

$Csv_location = "C:\Setup\"
$Movies_location = "C:\Setup\Movies"
$DestinationPath = "C:\Setup\"

$Tempcsv = Import-Csv "C:\Setup\Movies.csv" -Delimiter "|" -Encoding UTF8 | Where-Object {$_.Available -eq "y"} | Select Name

foreach ($Movie in $Tempcsv) {
    $Tempname = $Movie.name
    Copy-Item -Path $Movies_location\$Tempname -Destination $DestinationPath -Recurse -Verbose }

如果我输入 $tempname the $movie.name 我可以复制所有文件,但如果没有它,我会在不存在的文件路径中获得 @{moviename} 作为名称。

您可以暂时将其用作解决方法。我会带着更好的答案回来。

于 2017-12-10T13:10:08.730 回答