2013-04-09 122 views
-1

我需要檢查並返回文件系統中存在但未列在給定文本文件中的文件。例如,我的文本文件(sample.txt的)將包含類似的路徑:如何使用powershell找到文本文件路徑不存在的文件

\\SharedDrive\Data\DevS\Common\app_name\subfolder1\Archive\Archive1.vbproj 
\\SharedDrive\Data\DevS\NotCommon\app_name\subfolder1\user\WebApp.vbproj 
\\SharedDrive\Data\DevS\UnCommon\app_name\subfolder1\Manager\Managerial.vbproj 

碰巧有該驅動器上存在的VB工程文件,但不在名單之中,這是我想和一起返回他們的完整路徑。例如:

\\SharedDrive\Data\DevS\Common\app_name\subfolder2\Windows\SharedArchive.vbproj 
\\SharedDrive\Data\DevS\NotCommon\app_name2\subfolder1\user2\WebApp2.vbproj 

我嘗試這樣做:

$log = "e:\pshell\notExists.log" 

Get-Content "e:\pshell\Sample.txt" | Where-Object { 
#Keep only paths that does not exists 
!(Test-Path $_) 
} | Set-Content $log 

但這確實周圍的其他方法。

+1

嗯......不,你的代碼確實你說你想要它做什麼。不過,您可能希望將'Test-Path $ _'更改爲'Test-Path -LiteralPath $ _',只是爲了安全起見。 – 2013-04-09 09:10:56

+0

@AnsgarWiechers:這段代碼實際上返回了列表中的一部分但不存在於驅動器上的文件。但我想要另一種方式 - 列表中不存在但存在於驅動器上的文件。 – 2013-04-09 11:48:28

回答

0

試試這個:

$baseDir = "\\SharedDrive\Data\DevS" 
$log = "..." 

$paths = Get-Content sample.txt 

Get-ChildItem $baseDir -Recurse -Filter *.vbproj | ? { 
    -not $_.PSIsContainer -and $paths -notcontains $_.FullName 
} | % { $_.FullName } | Set-Content $log 
+0

該代碼返回基本目錄下的所有文件夾。我只想返回列表中不存在的vb項目文件名(sample.txt),並且位於驅動器中。 – 2013-04-10 04:44:30

+0

查看更新的答案。 – 2013-04-10 07:45:12

相關問題