我正在尝试创建一个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
}
有更简单的方法吗?
答案 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"
}