使用PowerShell确定文件夹中是否没有特定文件扩展名的文件

4

我有一个文件夹,其中没有包含任何扩展名为"rar"的文件。我在PowerShell命令行中使用gci(即Get-ChildItem的别名)运行以下命令:

PS> gci *.rar

正如预期的那样,由于没有这样的文件,因此没有任何报告返回。但是,当我执行"echo $?"时,它返回true。

我该如何测试给定文件扩展名的文件不存在? 我正在使用Windows 7上的PowerShell v2。

2个回答

6
#If no rar files found...
if (!(gci c:\ *.rar)){
    "No rar files!"
}
#If rar files found...
if (gci c:\ *.rar){
    "Found rar file(s)!"
}

'if' 会评估括号中指定的条件,返回一个布尔值(True 或 False),如果条件为真,则执行花括号中的代码。在这个例子中,如果 gci 返回 0 个文件,那么将返回 False(可能相当于 'if exists'),因此在第一个示例中,我们使用 not 运算符(!)来反转逻辑以返回 True 并执行代码块。在第二个示例中,我们正在寻找 rar 文件的存在,并希望代码块在发现任何文件时执行。


+1 这个可行。你能解释一下 if 语句是如何从 gci cmdlet 中获取结果的吗?谢谢。 - Sabuncu
@Lars 谢谢,我也喜欢你的回答,提供了很好的额外信息 - 惊讶于V3语法在V2中不可用! - nimizen

3

gci 返回一个数组。您可以检查数组中包含的结果数量。

if ((gci *.rar | measure-object).count -eq 0)
{
  "No rars"
}

使用PowerShell v3会更方便一些:
if ((gci *.rar).Count -eq 0)
{
  "No rars"
}

+1,没错,这个可行。之前不知道有measure-object这个命令,谢谢。 - Sabuncu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接