2017-12-10 1 views
0

안녕하세요 저는 PowerShell을 처음 사용하고 있으며 영화 전송 스크립트를 만들려고합니다. 내 영화 폴더의 하위 항목을 나열하고 .csv로 덤프 할 스크립트를 만들었습니다. 최종 사용자는 .csv 파일을 선택하고 다른 열에 'y'를 입력 할 수 있습니다. 그런 다음 Powershell 스크립트를 실행하여 'y'열을 사용하여 선택 항목을 필터링하고 항목을 비교하여 별도의 폴더/드라이브에 복사합니다.Powershell은 csv 목록을 사용하여 디렉토리를 복사합니다.

.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 파일

Movies.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 
} 
+0

'$ csv_name'이 비어 있습니다. 당신은 아무 것도 지정하지 않습니다. 또한 이중 백 슬래시가있는 경로를 만듭니다. 'Join-Path'를 사용하면 실수를 피할 수 있습니다. 그리고 foreach를 잘못 사용합니다. – Swonkie

+0

고마워요. 미안 해요. 내 변수를 잘못 썼습니다. (단지 $ csv 일 예정이었습니다) –

+0

Swonkie가 지적한 정정 사항을 반영하여 질문을 편집해야합니다. 또한 foreach ($ _)는 나에게 매우 불분명하다. 당신은 종종 백분율 기호로 작성된 구성을 시도하고 있습니까? –

답변

0

나는 당신이 배열을 받고 복사 할 수있는 이름을 확인할 수없는 것 같다 생각에 선택한 모든 폴더를 복사하기 때문는 적합하지 않습니다.

$MoviesPath = "C:\Setup\Movies" 

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

기본값을 사용하지 않으므로 구분 기호를 약간 변경했습니다. 나는 $의 tempname에서 나는 모든 파일을 복사 할 수 있지만하지 않고 내가 존재하지 않는 파일 경로의 이름 @ {에서 moviename}으로 얻을 $의 movie.name를 넣으면

$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 } 

.

잠시 동안이 문제를 해결할 수 있습니다. 나는 더 좋은 대답으로 돌아올 것이다.

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 

    } 
    } 
} 
관련 문제