2014-07-19 84 views
1

我想在Powershell中编写一个脚本来匹配文件名的扩展名。这是我到目前为止有:不能在PowerShell中获得像预期的那样工作

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

这里是输出:

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

如此看来,它应该工作,但事实并非如此。如果我将“-contains”切换为“-match”,那么它就起作用了,尽管我不想用匹配,因为它看起来应该是我真正想要的,并且对于我所需要的更精确。我错过了一些powershell的怪癖吗?

谢谢!

回答

2

尝试从以前$extensions

2

您的问题,去除[String]是,你投了数组String(多个对象 - >一个对象)。这将扩展连接在一起,每个项目之间有一个空格。

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

$extensions 
.mkv .mp4 .avi .wmv 

-contains用于查找数组中的项目。所以放下演员到弦乐,一切都会好起来的。

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

$extensions -contains ".mp4" 
True 
相关问题