2

我正在创建一个小脚本,它将列出计算机上的 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 语句排除大量文件夹?

4

3 回答 3

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 }
于 2014-10-13T09:10:18.813 回答
1

感谢您的回答!

是否有可能获得比现在更长的输出时间?

它现在大约有 100 个符号,然后如果路径长于此,则以点结尾。我得到了这样的东西-C:\我的文件\我的程序\ prog ...

于 2014-10-14T06:30:40.820 回答
0

我会使用这样的东西:

get-childitem -literalpath e:\*.exe -Recurse | where { $_.DirectoryName -notmatch "Windows" -and $_.DirectoryName -notmatch "MyOtherFiles"}
于 2014-10-13T09:35:30.953 回答