如何检查特定文件是否在文件夹中并写入主机是否存在
How can I check if specific files are within a folder and write to host if they are present or not
我正在尝试检查文件夹中是否存在文件列表,如果它们确实存在,则写入它们存在的主机,如果不存在,则写入它们不存在的主机。
我的代码可以检查是否所有文件都存在,但是当尝试写入控制台时,即使文件丢失,它也总是评估工作。
对于 $msis
中的每个文件,如果存在于文件夹
中,这将 return 为真
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CC2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
foreach($msi in $msis){
$test = (Test-Path $msi) -PathType leaf)
write-host "$test"
}
我添加了 if else 语句来检查 $test
是否为真 write-host "I Work"
else write-host "I Fail"
我的问题是,即使文件丢失,它仍然会评估为“我工作”,只有当所有文件都不存在时,它才会评估为“我失败”。
我想做的是,如果一个或多个文件丢失,让它写入主机“我失败了”。
if ($test -eq 'True')
{ write-host "I work" }
else
{
write-host "I fail"
}
如果我理解你的问题:
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CC2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
$test = $true
foreach($msi in $msis){
$test = $test -and (Test-Path $msi -PathType leaf)
if (-not $test) { break } # immediately exit the loop on the 1st False
}
write-host "$test"
稍作休息并重新访问后,我现在设法稍微更改了我的脚本以使其正常工作。
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CCS2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
if (($msis | foreach {test-path $msis}) -contains $false)
{
write-host "I Fail"
}
else
{
write-host "I Work"
}
如果 $msis
中的任何文件丢失,这现在将显示“我失败了”。
Test-Path -Path
以<string[]>
为输入,也就是说,它可以评估多条路径,这里不需要循环:
$Instance = "TEST"
$msipath = "D:\CCS$Instance"
$msis = 'CCS1.msi', 'CCS2.msi', 'CCS3.msi', 'CCS4.msi' | ForEach-Object {
Join-Path $msipath -ChildPath $_
}
If((Test-Path $msis).Contains($false))
{
write-host "I Fail"
}
else
{
write-host "I Work"
}
我正在尝试检查文件夹中是否存在文件列表,如果它们确实存在,则写入它们存在的主机,如果不存在,则写入它们不存在的主机。
我的代码可以检查是否所有文件都存在,但是当尝试写入控制台时,即使文件丢失,它也总是评估工作。
对于 $msis
中的每个文件,如果存在于文件夹
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CC2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
foreach($msi in $msis){
$test = (Test-Path $msi) -PathType leaf)
write-host "$test"
}
我添加了 if else 语句来检查 $test
是否为真 write-host "I Work"
else write-host "I Fail"
我的问题是,即使文件丢失,它仍然会评估为“我工作”,只有当所有文件都不存在时,它才会评估为“我失败”。
我想做的是,如果一个或多个文件丢失,让它写入主机“我失败了”。
if ($test -eq 'True')
{ write-host "I work" }
else
{
write-host "I fail"
}
如果我理解你的问题:
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CC2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
$test = $true
foreach($msi in $msis){
$test = $test -and (Test-Path $msi -PathType leaf)
if (-not $test) { break } # immediately exit the loop on the 1st False
}
write-host "$test"
稍作休息并重新访问后,我现在设法稍微更改了我的脚本以使其正常工作。
$Instance = "TEST"
$msipath = "D:\CCS${Instance}\"
$msis = @("${msipath}CCS1.msi", "${msipath}CCS2.msi", "${msipath}CCS3.msi", "${msipath}CCS4.msi")
if (($msis | foreach {test-path $msis}) -contains $false)
{
write-host "I Fail"
}
else
{
write-host "I Work"
}
如果 $msis
中的任何文件丢失,这现在将显示“我失败了”。
Test-Path -Path
以<string[]>
为输入,也就是说,它可以评估多条路径,这里不需要循环:
$Instance = "TEST"
$msipath = "D:\CCS$Instance"
$msis = 'CCS1.msi', 'CCS2.msi', 'CCS3.msi', 'CCS4.msi' | ForEach-Object {
Join-Path $msipath -ChildPath $_
}
If((Test-Path $msis).Contains($false))
{
write-host "I Fail"
}
else
{
write-host "I Work"
}