我有点卡在这里。基本上我有一个脚本从文本文件中读取目录和文件路径。
我想通过 driveletter 和排除路径来过滤它们,例如program files
和C:\Windows
目录。每个driveletter都有一个变量但是当我使用下面的代码时,它似乎没有过滤任何东西。如果包含中包含C
E
或G
似乎无关紧要。它总是将SaveMe.txt
文件的整个内容放在每个变量中。
有什么建议吗?
$CDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("C:\")) -and $_ -NotContains "Program Files" -or "C:\Program Files (x86)" -or "C:\Windows" }
$EDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("E:\")) -and $_ -NotContains "Program Files" -or "C:\Program Files (x86)" -or "C:\Windows" }
$GDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("G:\")) -and $_ -notcontains "Program Files" -or "C:\Program Files (x86)" -or "C:\Windows" }
答案 0 :(得分:1)
试试这个
解决方案1:
$CDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and $_.Contains("C:\") -and !$_.Contains("Program Files") -and !$_.Contains("C:\Windows") }
$EDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and $_.Contains("E:\") -and !$_.Contains("Program Files") -and !$_.Contains("C:\Windows") }
$GDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and $_.Contains("G:\") -and !$_.Contains("Program Files") -and !$_.Contains("C:\Windows") }
解决方案2:
$CDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("C:\")) -and $_ -Notlike "*Program Files*" -and $_ -Notlike "*C:\Windows*" }
$EDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("E:\")) -and $_ -Notlike "*Program Files*" -and $_ -Notlike "*C:\Windows*" }
$GDrive = Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and ($_.Contains("G:\")) -and $_ -Notlike "*Program Files*" -and $_ -Notlike "*C:\Windows*" }
答案 1 :(得分:0)
你需要使用-like和-notlike。包含用于检查数组中是否存在某些内容,而不是字符串
答案 2 :(得分:0)
答案 3 :(得分:0)
优化解决方案(文件只打开1x)
$CDrive=@()
$EDrive=@()
$GDrive=@()
Get-Content $PSScriptRoot\SaveMe.txt | where { $_.length -gt 4 -and $_ -notlike "*Program Files*" -and $_ -notlike "*C:\Windows*" } | %{ if ($_.Contains("C:\")) {$CDrive+=$_};if ($_.Contains("E:\")) {$EDrive+=$_};if ($_.Contains("G:\")) {$GDrive+=$_};}