“$ _。extension -eq”无法正常工作?

时间:2010-11-04 19:32:29

标签: powershell

我尝试编写一个小脚本来自动创建mp3 / mp4文件的几十个文件夹/子文件夹的播放列表(m3u),同时省略其中的各种其他misc文件。我对Powershell知之甚少,但却设法将几乎可行的东西拼凑起来。唯一的昙花一现是当我使用“$ _ .extension -eq”时,它似乎不起作用,或者至少我没有正确使用它。例如,如果我使用它来匹配临时文件夹中的log / txt文件,它可以工作,但不适用于此实例。这是代码 -

$pathname = read-host "Enter path"
$root = Get-ChildItem $pathname | ? {$_.PSIsContainer}
$rootpath = $pathname.substring(0,2)
Set-Location $rootpath
Set-Location $pathname
foreach($folder in $root) {
Set-Location $folder
foreach($file in $folder) {
$txtfile =".m3u"
$files = gci | Where-Object {$_.extension -eq ".mp3" -or ".mp4"}
$count = $files.count
if($count -ge 2){
$txtfile = "_" + $folder.name + $txtfile
Add-Content $txtFile $files
}  
}
if(test-path $txtFile){
Add-Content $txtFile `r
}
Set-Location $pathname
}

我尝试了几种变体,例如将“-match”交换为“-eq”,但没有运气。顺便说一句,如果我从括号中省略“-or”.mp4“”那么它工作正常,但我需要它来匹配两者,并且只有两个mp3 / mp4。

提前致谢。

2 个答案:

答案 0 :(得分:8)

就你抱怨扩展而言,让我们从它开始。据推测,代码中存在错误;这个表达式/语法在技术上是有效的:

$_.extension -eq ".mp3" -or ".mp4"

但显然意图是:

$_.extension -eq ".mp3" -or $_.extension -eq ".mp4"

首先尝试更正的表达式。

答案 1 :(得分:3)

我要将其添加为快捷方式选项:

gci | Where-Object {".mp3",".mp4" -eq $_.extension}