我需要检查网络共享上多个文件夹中是否存在文件,并返回文件所在文件夹的名称。我是PowerShell的新手,所以到目前为止,我可以使用以下行检查网络共享中一个文件夹中是否存在该文件:
test-path \\networkshare\folder\file.txt
如何构建此代码以检查共享中其他四个文件夹中是否存在该文件,并返回该文件所在文件夹的名称?
提前感谢您的时间。
答案 0 :(得分:1)
这样的东西?
[string]$FileName = "file.txt"
$Directories = @("\\networkshare\folder", "\\networkshare\folder2", "\\networkshare\folder3")
$Directories | %{
If (Test-Path ($_ + "\" + $FileName))
{ Write-Host $_ }
}
将Write-Host更改为您需要对该文件夹名称执行的任何操作。
答案 1 :(得分:0)
这是Join-Path
存在的原因之一。我们可以用它来为我们建立路径。
$fileToLocate = "1.log"
$Directories = @("C:\temp", "\\networkshare\folder2", "\\networkshare\folder3")
Join-Path -Path $Directories -ChildPath $fileToLocate | Where-Object{Test-Path $_} | ForEach-Object{
Write-Host "$fileToLocate found in: $_" -ForegroundColor Green
}
在上面的示例中,Join-Path -Path $Directories -ChildPath $fileToLocate
会生成一个像这样的字符串数组
C:\temp\1.log
\\networkshare\folder2\1.log
\\networkshare\folder3\1.log
然后我们使用Test-Path
来查看是否存在任何这些内容。如果有,那么它会进入ForEach-Object
块,以便可以使用Write-Host
将其输出到控制台。