【发布时间】:2021-09-28 00:11:42
【问题描述】:
我正在遍历目录树,但试图过滤掉一些东西。
这是我拼凑的代码;
Get-ChildItem -Path $pathName -recurse -Filter index.aspx* -Exclude */stocklist/* | ? {$_.fullname -NotMatch "\\\s*_"} | Where {$_.FullName -notlike "*\assets\*" -or $_.FullName -notlike ".bk"}
- 从返回的项目中删除名称 index.aspx。
- 我想过滤掉所有以下划线开头的文件。
- 排除路径中包含 /stocklist/ 的任何内容。
- 排除路径中包含 /assets/ 的任何内容。
- 并排除路径中包含 .bk 的任何内容。
除了路径中的 .bk 之外,这对所有内容都有效。我很确定这是我的语法错误。
提前致谢。
【问题讨论】:
-
我假设 .bk 是扩展名?使用“*.bk”。
-
不,这不是扩展。它是路径名 EG c:/foo/something.bk/anotherthing/ 的一部分。谢谢。
-
只要使用
-notmatch '\.bk\b' -
只是在上一条
Where{ }语句上的注释,您想使用-and而不是-or,因为-or会传递任何比较结果之一返回$true的地方。所以如果它有\assets` in the path, but not.bk`,第二个条件将解析为$true,它会通过过滤器,这不是你的意图。要像您一样使用它,您需要不使用负比较器,然后将整个东西放在括号中并像这样Where { ! ($_.FullName -like "*\assets\*" -or $_.FullName -like "*.bk*")}对它执行-not(或!)
标签: powershell filtering powershell-4.0 get-childitem