2014-10-09 2 views
1

네트워크 공유의 여러 폴더에 파일이 있는지 확인하고 파일이있는 폴더의 이름을 반환해야합니다 .PowerShell : test-path를 사용하여 네트워크 공유의 여러 폴더에있는 파일 존재 여부를 확인하십시오.

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

가 어떻게가를 확인하기 위해 밖으로이 코드를 구축 가야합니까 : 나는이 줄을 사용하여 네트워크 공유에 하나 개의 폴더에있는 파일의 존재 여부를 확인할 수 있습니다, 그래서 지금까지 PowerShell을 새로운 해요 공유에있는 네 개의 다른 폴더에 파일이 있고 파일이있는 폴더의 이름을 반환합니까?

미리 감사드립니다.

답변

1

이와 비슷한 기능이 있습니까?

[string]$FileName = "file.txt" 

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

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

해당 폴더 이름으로 수행 할 작업을 Write-Host로 변경하십시오.

+1

내 이해를 돕기 위해 좀 더 간단한 것을 시도해 보도록하겠습니다. 나는 % 디렉토리 배열을 통해 반복하고 True/False 파일의 존재를 기반으로 반환하고 싶습니다. 나는 이것을 시도했다 :'$ Directories | {test-path $ Filename}'을 사용하지만 배열의 모든 항목에 대해 False를 반환하지만 파일이 두 디렉토리 – DBS

0

이것은 Join-Path이 존재하는 이유 중 하나입니다. 우리는 그것을 사용하여 우리를위한 길을 만들 수 있습니다. Join-Path -Path $Directories -ChildPath $fileToLocate 위의 예에서

$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 
} 

우리는 다음 그 중 하나가 존재하는지 Test-Path를 사용하므로

C:\temp\1.log 
\\networkshare\folder2\1.log 
\\networkshare\folder3\1.log 

같은 문자열 배열을 생성합니다. 그런 다음 ForEach-Object 블록으로 이동하여 Write-Host으로 콘솔에 출력 할 수 있습니다.