问题描述
我需要检查输入文件是否存在。
但是我得到的是True,即使文件不存在,测试路径的输出也会打印两次,结果不同。
Set-Variable -Name Files -Value (Read-Host "instert file name")
Set-Variable -Name FromPath -Value ("C:\Users\Desktop\AP\AP\parser\*.VML","C:\Users\Desktop\AP\AP\parser\*.STA")
Set-Variable -Name NameOfFiles (Get-ChildItem -Path $FromPath "-Include *.VML,*.STA" -Name)
Write-Host "FILES IN FOLDER:"
$NameOfFiles
Write-host "---------------------"
Write-host "FILES FROM INPUT: "
Splitted
Write-host "---------------------"
Write-host "FILE EXISTS: "
ForEach ($i in Splitted) {
Filetocheck
}
function Splitted {
$Files -Split " "
}
function Filetocheck {
Test-Path $FromPath -Filter $Files -PathType Leaf
}
例如,我越来越result
解决方法
您已经使这个问题复杂化了。
一旦获得数组中所有扩展名为.VML或.STA的文件的名称,就不必再使用Test-Path
,因为您知道数组$NameOfFiles
中的文件确实存在,否则{ {1}}不会列出它们。
这意味着您可以摆脱已定义的帮助程序功能,应该在代码顶部编写哪个BTW,因此之前调用它们。
尝试
Get-ChildItem
输出应类似于
$Files = (Read-Host "instert file name(s) separated by space characters" ) -split '\s+'
$FromPath = 'C:\Users\Desktop\AP\AP\parser'
# if you need to recurse through possible subfolders
$NameOfFiles = (Get-ChildItem -Path $FromPath -Include '*.VML','*.STA' -File -Recurse).Name
# without recursion (so if files are directly in the FromPath):
# $NameOfFiles = (Get-ChildItem -Path $FromPath -File | Where-Object {$_.Extension -match '\.(VML|STA)'}).Name
Write-Host "FILES IN FOLDER:"
$NameOfFiles
Write-host "---------------------"
Write-host "FILES FROM INPUT: "
$Files
Write-host "---------------------"
Write-host "FILE EXISTS: "
foreach ($file in $Files) { ($NameOfFiles -contains $file) }