我正在尝试在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”然后它可以工作,虽然我不想使用匹配,因为看起来-contains应该是我真正想要的,并且对于我需要的更准确。我错过了一些PowerShell的怪癖吗?
谢谢!
答案 0 :(得分:2)
尝试从[String]
$extensions
答案 1 :(得分:2)
您的问题是您要将数组转换为String
(多个对象 - >一个对象)。这将扩展连接在一起,每个项目之间有一个空格。
[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions
.mkv .mp4 .avi .wmv
-contains
用于查找数组中的项。所以把演员放到弦上,一切都会好的。
$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions -contains ".mp4"
True