2014-10-09 84 views
1

我需要檢查網絡共享上多個文件夾中是否存在文件,並返回文件所在文件夾的名稱。我是新來的PowerShell所以到目前爲止,我可以用這條線一個文件夾中檢查該文件是否存在網絡共享:PowerShell:使用測試路徑檢查網絡共享上多個文件夾中是否存在文件

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

我如何去構建出這個代碼,以檢查共享上的其他四個文件夾中是否存在該文件,並返回文件所在文件夾的名稱?

提前感謝您的時間。

回答

1

像這樣?

[string]$FileName = "file.txt" 

$Directories = @("\\networkshare\folder", "\\networkshare\folder2", "\\networkshare\folder3") 

$Directories | %{ 
    If (Test-Path ($_ + "\" + $FileName)) 
    { Write-Host $_ } 
} 

更改寫主機無論您需要用該文件夾名稱做什麼。

+1

爲了我的理解,讓我們嘗試一些更簡單的方法。我想遍歷%directories數組,並根據文件的存在返回True/False。我試過這個:'$ Directories | {test-path $ Filename}',但是它對數組中的所有項返回False,儘管我知道該文件存在於兩個目錄中 – DBS 2014-10-10 19:39:46

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

相關問題