PowerShell:使用test-path检查网络共享上多个文件夹中是否存在文件

时间:2014-10-09 19:20:46

标签: powershell powershell-v3.0

我需要检查网络共享上多个文件夹中是否存在文件,并返回文件所在文件夹的名称。我是PowerShell的新手,所以到目前为止,我可以使用以下行检查网络共享中一个文件夹中是否存在该文件:

test-path \\networkshare\folder\file.txt

如何构建此代码以检查共享中其他四个文件夹中是否存在该文件,并返回该文件所在文件夹的名称?

提前感谢您的时间。

2 个答案:

答案 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将其输出到控制台。