Powershell - 测试路径寻找3个文件

时间:2014-09-03 17:33:47

标签: powershell if-statement

我正在尝试创建一个powershell脚本,用于检查文件夹中的3个特定文件。如果存在3个文件,则继续。

我一直在尝试使用test-path命令。我得到的最接近的是:

$checkwim = test-path $imagepath\* -include OS.wim, data.wim, backup.wim.

然而,这对我来说无效,因为它返回" True"如果找到3个中的任何一个。我需要确保所有3都存在。

我使用下面的工作,但我希望更简单的方法。

$checkwimos = test-path $imagepath\* -include OS.wim
$checkwimdata = test-path $imagepath\* -include Data.wim
$checkwimonline = test-path $imagepath\* -include Online.wim

if (($checkwimos -ne $True) -or ($checkwimdata -ne $True) -or ($checkwimonline -ne $True))
{
Echo "WIM file(s) not located.  Script Aborting"
exit
}

有更简单的方法吗?

4 个答案:

答案 0 :(得分:1)

如果你想避免硬编码检查每种文件类型,你可以做这样的事情:

$files = @('os.wim','data.wim','backup.wim')
$checkWim = $files | foreach-object {test-path $imagepath\* -Include $_} | Where-Object {$_ -eq $false}
If($checkWim -eq $false){"WIM file(s) not located.  Script Aborting"}
else{
#do stuff
}

您还可以导入文件列表,而不是创建数组。

答案 1 :(得分:0)

你的方式已经非常简单了,尽管你可以通过以下方式使其更具可读性:

$checkwimos = test-path (Join-Path $imagepath OS.wim)
$checkwimdata = test-path (Join-Path $imagepath Data.wim)
$checkwimonline = test-path (Join-Path $imagepath Online.wim)

if (-not ($checkwimos -and $checkwimdata -and $checkwimonline))
{
Echo "WIM file(s) not located.  Script Aborting"
exit
}

答案 2 :(得分:0)

另一个策略:

$files = @('os.wim','data.wim','backup.wim')

if (($files | foreach {test-path $imagepath\$_}) -contains $false)
 { 
   Echo "WIM file(s) not located.  Script Aborting"
   exit
 }

答案 3 :(得分:0)

如果你坚持使用单线,下面应该可行。

if (@(Get-ChildItem -LiteralPath "C:\temp\" | Where-Object -FilterScript {@("os.wim", "data.wim", "backup.wim") -ccontains $_.Name}).Count -eq 3)
{
write "Files were present"
}