我正在创建一个小脚本,它将列出计算机上的EXE文件。
$computername = get-content env:computername
get-childitem C: -recurse | ? {$_.fullname -notmatch 'C:\\Windows'} | where {$_.extension -eq ".exe"} | format-table fullname | Out-File "\\server\incomming\$computername.txt"
问题是-notmatch不接受更多语句。我可以复制粘贴? {$_.fullname -notmatch 'C:\\Windows'}
并用于其他文件夹,如Program Files(x86),Program Files等。但我不想太夸张一个剧本。
有没有办法可以用-notmatch语句排除多个文件夹?
答案 0 :(得分:5)
您可以使用-and
之类的逻辑运算符来表示更复杂的逻辑表达式。
Get-ChildItem C:\ -Recurse | Where-Object { ($_.FullName -notmatch "C:\\Windows") -and ($_.FullName -notmatch "C:\\Program Files") }
对于许多路径,我会在调用Get-ChildItem
之前将它们添加到数组或哈希表中,并使用Where-Object
检查数组或哈希表中是否存在管道文件对象路径。最终,您必须在某处列出路径,但不一定在单个命令中。例如:
$excludedPaths = @("C:\Windows", "C:\Program Files");
Get-ChildItem C:\ -Recurse | Where-Object { $excludedPaths -notcontains $_.Directory }
答案 1 :(得分:1)
感谢您的回答!
是否有可能获得比现在更长的输出?
现在它就像是100个符号,如果路径长于此符号则以点结束。 我得到这样的东西 - C:\ my files \ my programs \ prog ...
答案 2 :(得分:0)
我会用这样的东西:
get-childitem -literalpath e:\*.exe -Recurse | where { $_.DirectoryName -notmatch "Windows" -and $_.DirectoryName -notmatch "MyOtherFiles"}