在目录中搜索特定的文件类型,如果PowerShell中存在,则返回true或false
现在,这可能是一个非常简单的修复,但我似乎无法得到它。我试图搜索一个目录及其子文件夹中的特定文件类型。如果文件存在,我的代码当前将返回true,但我也试图让它在终端上返回false。下面是我的代码在目录中搜索特定的文件类型,如果PowerShell中存在,则返回true或false,powershell,filter,get-childitem,Powershell,Filter,Get Childitem,现在,这可能是一个非常简单的修复,但我似乎无法得到它。我试图搜索一个目录及其子文件夹中的特定文件类型。如果文件存在,我的代码当前将返回true,但我也试图让它在终端上返回false。下面是我的代码 Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_} 现在,对于包含PEM文件的文件夹,在终端上将返回为true。但是我想让它在终端上以false的形式返回没有该文件的文件夹
Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_}
现在,对于包含PEM文件的文件夹,在终端上将返回为true
。但是我想让它在终端上以false
的形式返回没有该文件的文件夹,因为我计划使用true
和false
来执行不同的代码集
$s = 'C:\Users\user\Desktop\Source'
foreach ($d in (Get-ChildItem -Recurse $s -Directory:$true)) {
if ($d.GetFiles('*.pem')) {
$true
} else {
$false
}
}
这应该让你开始。。。我真希望PowerShell有一个内置的三元结构
这应该让你开始。。。我真希望PowerShell有一个内置的三元结构…这个很简单。如果$target_files有一个值,则返回true,否则返回false
$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
if($target_files){
write-host "This returns true if there are files."
}
else{
write-host "This returns false if there are no files."
}
如果您有powershell 7,您可以使用三元运算符,但是并非所有人都有powershell 7,因此,如果您不熟悉If/ELSE方法,这里有一个更快、更短的实现方法$根据文件是否存在,结果将返回true或false
$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]
这个很简单。如果$target_files有一个值,则返回true,否则返回false
$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
if($target_files){
write-host "This returns true if there are files."
}
else{
write-host "This returns false if there are no files."
}
如果您有powershell 7,您可以使用三元运算符,但是并非所有人都有powershell 7,因此,如果您不熟悉If/ELSE方法,这里有一个更快、更短的实现方法$根据文件是否存在,结果将返回true或false
$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]
等待这应该已经返回$false了。。。它从不返回false的原因是,您已经通过返回一个对象列表隐式测试了存在性,通过Get ChildItem,Windows提供了一个始终存在的对象列表。。。因此,您永远不会得到false,因为您传递它的所有对象都已知存在。对,我想我主要遇到的问题是,我可以让它返回
$true
和$false
,但它会检查每个文件夹中的每个文件,并返回1个true和8个false。我更想知道文件夹中是否存在特定的文件扩展名,返回$true
,如果不存在,返回$false
。因此,最终它将显示1$true
和1$false
,因此为了澄清,您需要的是更多地了解哪些目录包含.PEM文件,并且您希望报告哪些目录中包含多少PEM文件?对,我想知道一个目录是否包含PEM文件。我最终要做的是;如果它有一个PEM文件,它将执行Y,如果它没有PEM文件,它将执行步骤X,然后执行Y。这应该让你开始。等等。。。这应该已经返回$false了。。。它从不返回false的原因是,您已经通过返回一个对象列表隐式测试了存在性,通过Get ChildItem,Windows提供了一个始终存在的对象列表。。。因此,您永远不会得到false,因为您传递它的所有对象都已知存在。对,我想我主要遇到的问题是,我可以让它返回$true
和$false
,但它会检查每个文件夹中的每个文件,并返回1个true和8个false。我更想知道文件夹中是否存在特定的文件扩展名,返回$true
,如果不存在,返回$false
。因此,最终它将显示1$true
和1$false
,因此为了澄清,您需要的是更多地了解哪些目录包含.PEM文件,并且您希望报告哪些目录中包含多少PEM文件?对,我想知道一个目录是否包含PEM文件。我最终要做的是;如果它有一个PEM文件,它将执行Y,如果它没有PEM文件,它将执行步骤X,然后执行Y。这应该让您开始。PowerShell 7有一个三元运算符:我有PS 7,所以我将研究三元运算符。我不太确定我是否会使用它,因为我仍然需要支持5.1。但是谢谢你的开始,我想我可以让它满足我的需要!三元实现:@($($True),$($False))[!$False]
或由@shadow2020显示$()子表达式运算符可以包含任何表达式。我认为三元实现不值得。简单的if..else
code没有问题。它可读性强,易于理解。与其说我想在这个例子中使用它,不如说我为自己的使用而感到惋惜。。。但值得注意的是,PowerShell 7有一个三元运算符:我有PS7,所以我将研究三元运算符。我不太确定我是否会使用它,因为我仍然需要支持5.1。但是谢谢你的开始,我想我可以让它满足我的需要!三元实现:@($($True),$($False))[!$False]
或由@shadow2020显示$()子表达式运算符可以包含任何表达式。我认为三元实现不值得。简单的if..else
code没有问题。它可读性强,易于理解。与其说我想在这个例子中使用它,不如说我为自己的使用而感到惋惜。。。但这是公平的。