Arrays Can';无法使powershell中的包含按预期工作
我正在尝试在Powershell中编写一个脚本,该脚本将匹配文件名的扩展名。这就是我到目前为止所做的:Arrays Can';无法使powershell中的包含按预期工作,arrays,powershell,contains,Arrays,Powershell,Contains,我正在尝试在Powershell中编写一个脚本,该脚本将匹配文件名的扩展名。这就是我到目前为止所做的: $location = $args[0]; [String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv"); $pruneSize = 41240000; Set-Location $location; Get-ChildItem -Recurse | ForEach-Object { If($extensions -contain
$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”,那么它就可以工作,尽管我不想使用match,因为它看起来是这样的-contains应该是我真正想要的,并且更准确地满足我的需要。我是不是错过了powershell的一些怪癖
谢谢 尝试从
$extensions之前删除[String]
尝试从$extensions
之前删除[String]
您的问题是将数组强制转换为String
(多个对象->一个对象)。这将扩展与每个项目之间的空格连接在一起
[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions
.mkv .mp4 .avi .wmv
-contains
用于在数组中查找项。所以把演员放在弦上,一切都会好起来的
$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions -contains ".mp4"
True
您的问题是,您正在将数组转换为String
(多个对象->一个对象)。这将扩展与每个项目之间的空格连接在一起
[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions
.mkv .mp4 .avi .wmv
-contains
用于在数组中查找项。所以把演员放在弦上,一切都会好起来的
$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$extensions -contains ".mp4"
True