2014-07-19 2 views
1

Powershell에서 파일 이름의 확장자와 일치하는 스크립트를 작성하려고합니다. powershell에서 -contains를 예상대로 작동하지 못합니다.

.mp4 not found in .mkv .mp4 .avi .wmv 
.bat not found in .mkv .mp4 .avi .wmv 
.bat not found in .mkv .mp4 .avi .wmv 

그래서 작동해야한다는 것 같지만 그렇지 않습니다 : 여기
$location = $args[0]; 

[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv"); 
$pruneSize = 41240000; 

Set-Location $location; 

Get-ChildItem -Recurse | ForEach-Object { 
    If($extensions -contains $_.Extension) { 
     Write-Host "Found it"; 
    } 
    else { 
     Write-Host $_.Extension not found in $extensions; 
    } 
} 

그리고

는 출력 : 이것은 내가 지금까지있는 것입니다. "-contains"를 "-match"로 변경하면 작동하지만, 실제로 사용하고 싶지는 않지만 - 포함 할 내용은 내가 원하는 내용이어야하고 필요한 부분에 대해 더 정확해야합니다. 나는 파워 쉘의 몇 가지 단점을 놓치고 있습니까?

감사합니다. $extensions

답변

2

시도는 String (-> 하나의 객체에 여러 개체)에 배열을 캐스팅하고 있다는 점이다. 이렇게하면 각 항목 사이의 공백과 함께 확장이 결합됩니다.

[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv"); 

$extensions 
.mkv .mp4 .avi .wmv 

-contains은 배열의 항목을 찾는 데 사용됩니다. 그래서 캐스트를 문자열로 떨어 뜨리면 모두 괜찮을 것입니다.

$extensions = @(".mkv", ".mp4", ".avi", ".wmv"); 

$extensions -contains ".mp4" 
True 
2

전에 귀하의 문제에서 [String]을 제거

관련 문제